【问题标题】:PHP: Efficient way to store simple cache array in database?PHP:在数据库中存储简单缓存数组的有效方法?
【发布时间】:2011-04-10 14:48:42
【问题描述】:

基本上对于动态网站的插件(网站可能相当大)我正在缓存某种搜索的结果(因为结果来自外部搜索),结果的长度可以是 400-1500 个字符。

由于结果以数组形式出现,我使用json_encode(比序列化更快)存储在数据库中,但每个条目约 1.5KB(因为可能有 10,000 个)=15MB 对我来说似乎有点大。

我的问题是:
* 这是每个条目可接受的(您的意见)尺寸吗?
* 运行 GZip 或类似的程序并将其存储在 MySQL 的 binary 字段中会更高效还是最终占用过多的 CPU 时间?有什么平时用的类似的吗?

我不喜欢使用 memcached 或类似的东西,因为它需要可移植(但那会更好吗?)这对我来说主要是一个理论问题,我只需要输入才能实现任何可靠的东西。

【问题讨论】:

  • "15MB 对我来说似乎有点大。" - 也许,如果您必须将这些数据存储在手表中(编辑:哦,不,即使那样,请参阅thinkgeek.com/interests/dads/9771)。还是有我们不知道的特殊要求?
  • 如果线性使用,千兆字节的数据很小,但每秒多次挑剔部分数据是我停下来考虑大于几兆字节的地方,尽管我假设它不是真的很慢。
  • 即使这样 imo 这也倾向于过早的优化方面。在没有优化的情况下实现这一点应该相当容易,然后对其进行压力测试,然后如果您确定数据大小是瓶颈,添加或多或少的透明压缩.

标签: php mysql database caching performance


【解决方案1】:

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

但是如果你真的想压缩你的字段,那么看看 Mysql 的 COMPRESS()UNCOMPRESS() 函数。

这可以放入您的代码中,并且无需更改任何 PHP/Logic 即可工作。

【讨论】:

  • 啊。我读到 MySQL COMPRESS() 比使用 gzcompress 的 PHP 慢,所以我对 gzcompress 进行了基准测试。 40,000 次迭代gzcompress(700kbstr, 1) 耗时 1.2 秒,长度为 394KB。 gzcompress(700kbstr, 9) 耗时 2.5 秒,结果为 388kbs。我确信在BINARY 字段中使用UNHEX 会使其更小,我将进行测试。我会接受这个,因为它看起来最有前途。 编辑: 措辞错误,你知道我的意思。
猜你喜欢
  • 2013-05-19
  • 1970-01-01
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多