Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择什么只存储一个整数?Sqlite?还是文本文件?_Php_Web Services_Sqlite_Text Files - Fatal编程技术网

Php 选择什么只存储一个整数?Sqlite?还是文本文件?

Php 选择什么只存储一个整数?Sqlite?还是文本文件?,php,web-services,sqlite,text-files,Php,Web Services,Sqlite,Text Files,我已经用PHP构建了一个小型web服务。我想控制对特定API方法的调用数量 我一开始考虑使用文本文件,因为它只是一个整数。但是在仔细查看SQLite之后,它似乎更方便了。 所以代码就是:从SQLite获取“计数器”,并在调用该方法时增加它,然后将其存储回SQLite db 这样做对吗?仅仅使用一个文件或者。。。也许是别的什么 提前感谢。数据库通常比文件系统具有更好的可扩展性,但您需要小心,并对任何一种机制使用适当的锁。当然要使用平面文件 这将是正确的做法 极其简单 不依赖第三方库 您只需使用普

我已经用PHP构建了一个小型web服务。我想控制对特定API方法的调用数量

我一开始考虑使用文本文件,因为它只是一个整数。但是在仔细查看SQLite之后,它似乎更方便了。 所以代码就是:从SQLite获取“计数器”,并在调用该方法时增加它,然后将其存储回SQLite db

这样做对吗?仅仅使用一个文件或者。。。也许是别的什么


提前感谢。

数据库通常比文件系统具有更好的可扩展性,但您需要小心,并对任何一种机制使用适当的锁。

当然要使用平面文件

  • 这将是正确的做法
  • 极其简单
  • 不依赖第三方库
  • 您只需使用普通记事本即可查看或更新计数器
  • 比SQLite更快(无SQL解析,无其他开销)
  • 和SQLite一样可扩展(SQLite只是更复杂的平面文件)

如果您需要尽可能快的速度完成某项任务,您必须在内存中创建持久化进程以消除I/O瓶颈。但是请。。。只是不要使用SQL数据库来存储单个整数。

将它放在真实的数据库中—文本文件和SQLite DB都会有锁定问题,如果文件当前打开,并且出现新的打开请求,则第二个请求将出错。使用真正的数据库,如MySQL、MSSQL或任何可用的数据库。

第三种可能性:。它与兼容,但将其键值存储存储到BDB文件。它不仅具有读写命令,还具有数值的原子递增/递减

另一种选择是编写“计数器服务器”。通过套接字获取“读取”和“增量”命令的独立进程。它的优点是很容易实现“原子”增量。它将计数器存储在一个简单的文件中,没有并发问题,因为从来没有多个服务器


用不到一百行的C语言编写应该很容易。一次只处理一条命令,每隔几秒钟刷新一次磁盘。由于处理过程非常简单,延迟非常小。

您可以使用它来保持计数器,并确保安全增量。

根据SQLite,它可以处理高达“100K[sic]点击/天”的站点。如果您想了解这一点,您可能需要研究一个更健壮的数据库,比如MySQL。但是,如果你每天为一个网站向数据库写入10万条记录,根据你的例子,我认为你所做的事情有问题。这听起来真像是一项缓存工作。抱歉,我对PHP一无所知


关于文件与SQLite的比较,他们有这样的说法:“许多程序使用fopen()、fread()和fwrite()来创建和管理本地格式的数据文件。SQLite特别适合作为这些临时数据文件的替代品。”()

SQL数据库只用于存储一个整数?事实上,我很震惊你的答案被如此高估,这是软件开发的可悲状态。@lubos hasko:我只是陈述事实而已。海报上说的是一个web服务;文件系统会扩展到对单个文件的数千次调用吗?平面文件会像SQLite一样扩展,因为SQLite是平面文件。只是需要特殊的库来读取或写入它们。@lubos hasko:什么神秘属性必须有一个DB文件才能不“扁平”?SQLite数据库是位于内部“页面”结构之上的B树,是一个复杂的加载/缓存/脏/磁盘/提交层。您没有提到如何处理锁定和潜在事务。。。锁定是使这件事情以可靠的方式工作的关键。哦,你认为SQLite如何处理锁定?它以只读模式或独占读写模式打开文件。。。。没有魔法,你没有抓住重点。您可以在共享读模式或独占读写模式下打开文件。SQLite内部也是这样运行的。SQLite肯定要处理同一个数据库的多个进程/线程/句柄。但它们仍然只是文件。像MySQL这样的完整DBMS在处理1000次同时写入方面要高得多。您认为MySQL将数据存储在哪里?在一个神奇的宝箱中?但你有一点,SQLite显然锁定了整个数据库而不是记录:。需要更多的研究。