2010-09-10 70 views
2

基本上对于一个动态站点插件(网站可能相当大)我缓存某种搜索结果(因为结果来自外部搜索),结果可能是400-1500个字符的长度。因为结果出现在一个数组中,我使用json_encode(比序列化更快)来存储在数据库中,但是每个条目大约1.5KB(因为可能有10,000个)= 15MB对我来说似乎有点大。PHP:在数据库中存储简单缓存数组的有效方法?

我的问题是:
*这是一个可接受的(您的意见)尺寸每项?
*将运行GZip或类似的并存储在MySQL的binary字段中效率更高还是花费太多CPU时间?任何通常使用类似的东西?

我更喜欢不使用memcached或类似的,因为它需要可移植(但会更好吗?)这主要是一个理论问题,我只需要输入,然后再实施任何实体。

+0

“15MB对我来说似乎有点大。” - 也许,如果你必须将这些数据存储在手表中(编辑:哦,不,甚至没有,请参阅http://www.thinkgeek.com/interests/dads/9771/)。还是有我们还不知道的特殊要求? – VolkerK 2010-09-10 08:38:09

+0

如果线性使用的话,一个千兆字节的数据是很小的,但是每秒多次挑选其中的部分数据就是我停下来思考大于几兆字节的任何事情,尽管我会认为它实际上并不那么慢。 – John 2010-09-10 09:25:23

+0

即使这样imo这依赖于过早的优化方面。在没有优化的情况下实现这个应该相当容易,然后对它进行压力测试,然后_then_如果当_determined_数据大小是瓶颈时添加或多或少的透明压缩。 – VolkerK 2010-09-10 10:12:11

回答

2

对于任何类型的压缩,总是会有CPU成本,这取决于您是否有足够的资源来处理它,而不会有明显的减速。 空间便宜又丰富,所以15megs可以。

但是如果你真的想压缩你的领域,那么请查看Mysql的COMPRESS()UNCOMPRESS()函数。

这可以放到你的代码中,它可以在不改变任何PHP /逻辑的情况下工作。

+0

啊。我读了''COMPRESS()'比使用gzcompress的PHP慢,所以我测试了gzcompress。 40,000次迭代'gzcompress(700kbstr,1)'耗时1.2秒,长度为394KB。 'gzcompress(700kbstr,9)'耗时2.5秒,结果是388kbs。我确定在'BINARY'字段中使用'UNHEX'会使它变小,我会测试。我会接受这个,因为它看起来最有前途。 __EDIT:__误解了,你知道我的意思。 – John 2010-09-10 09:53:12

相关问题