长话短说,我正在寻找快速有效存储的最佳方法,主要是布尔变量,例如:
这些变量将仅存储一天,即每天午夜将被删除。
我可以想到五种方法来实现这一目标,但我不知道如何正确地加速测试,所以我当然可以使用这方面的帮助。
第一个想法是将一些变量存储在像<?php $___XYZ = true;
这样的文件中,然后包含它并返回$___XYZ
。问题是,很可能会有数百个这些变量,这可能会占用大量空间(因为,如果我错了,请纠正我,每个文件占用最少约4KB的空间,具体取决于分区格式)。 Big plus是易于访问,易于使用,并且在一天开始时易于清除整个事物(只需删除包含内容的整个文件夹)。访问速度有任何问题吗?
我可以用一种方式将变量组存储在一个文件中:
0:1
1:1
14:0
154:0
然后使用fgets查找和读取变量,但是编写中间文件呢?可以有效使用fwrite吗?我不太相信这种方式比1.好多了,但你怎么看?
使用apc_store和其他人来存储,修改和访问数据。我在这里有三个问题 - 我在某处看到启用APC可能会严重降低您的网站速度,缓存有时会出现奇怪的问题,我很好奇如何有效地删除“每日”缓存,并留下我可能拥有的任何其他内容缓存?它存储了数十万个变量有多好?
我可以创建一个包含两行(名称和变量)的表但是...我觉得与上述选项中的任何一行相比,它会非常缓慢。
总结一下 - 在PHP中存储变量的哪些方法最好?或者也许有更好的东西?
答案 0 :(得分:2)
对于分析,您可以使用Xdebug,它在已定义的文件夹中存储分析信息,并使用webgrind查看分析数据。
我在php.ini中为xdebug设置:
zend_extension=C:/WEB/PHP-ts/php_xdebug-2.1.0-5.3-vc6.dll
xdebug.collect_params=4
xdebug.show_local_vars=on
xdebug.scream=1
xdebug.collect_vars=on
xdebug.dump_globals=on
xdebug.profiler_enable=1
xdebug.profiler_output_dir=C:/WEB/_profiler/
xdebug.profiler_output_name=cachegrind.%s.out
xdebug.collect_return=1
xdebug.collect_assignments=1
xdebug.show_mem_delta=1
我发现blog post有关缓存性能的比较(但是从2006年开始!):
Cache Type Cache Gets/sec
Array Cache 365000
APC Cache 98000
File Cache 27000
Memcached Cache (TCP/IP) 12200
MySQL Query Cache (TCP/IP) 9900
MySQL Query Cache (Unix Socket) 13500
Selecting from table (TCP/IP) 5100
Selecting from table (Unix Socket) 7400
答案 1 :(得分:2)
memcached怎么样?这真的很快,当你只是存放bools时,它们都适合内存而没问题。这绝对是他们所有人中最快的选择。在午夜,您可以轻松读出当天收集的所有统计数据并清除缓存。
答案 2 :(得分:1)
使用memcached,您可以将变量存储在内存中并设置其到期时间,以便它们可以像每天一样旋转。
Memcached比你列出的任何其他方法都快,如果你是新手,请尝试this class我做了。
答案 3 :(得分:1)
我最喜欢这样做的方式是#2的变体,我从数字对中制作一个数组。然后很容易序列化数组并将其保存到文件中。
对于您的应用程序,如果多个访问者/进程需要同时访问阵列,则这会有一个缺点。也许通过为每个用户使用单独的文件来解决这个问题。
答案 4 :(得分:1)
我会选择mySQL和/或内存缓存,如APC或memcache。
老实说,对于大多数操作来说,正确索引的数据库表可能会非常快。您可以通过比较时间戳的DELETE
语句轻松清除所有记录。
它肯定比文件系统上的home-brew解决方案更快。假设您已经在网站的其余部分使用mySQL,则无需担心额外的存储层。
编辑:我还想指出内存是不稳定的。如果您的服务器断电,如果某个地方(如数据库)没有持久存在,您的数据就会消失。