将表转移到Memcache

时间:2009-11-24 03:59:19

标签: php mysql memcached

我有一个大表,我想将结果存储在Memcache中。我在我的服务器上设置了Memcache,但似乎没有任何有用的文档(我可以找到)如何有效地传输大量数据。我目前能想到的唯一方法是编写一个mysql查询,该查询抓取表的键和值,然后将其保存在Memcache中。它不是一个特别可扩展的解决方案(特别是当我的查询生成几十万行时)。关于如何做到这一点的任何建议?

编辑:对于我试图做的事情存在一些困惑。让我们说我有一个包含两个字段(键和值)的表。我正在快速提取信息并且必须将其与密钥相匹配我希望避免每页加载执行约1000次查询.Memcache似乎是一个完美的选择,因为它设置为使用键值。让我们说这个表有100K行。这是我所知道的唯一方式从db表获取数据到memcache是​​运行一个循环遍历表中每一行的查询,并创建一个单独的memcache行。

问题:这是使用memcache的好方法吗?如果是的话,是否有更好的方式来转移我的桌子?

2 个答案:

答案 0 :(得分:1)

你实际上可以拉出数组中的所有行并将数组存储在memcache

memcache_set($memcache_obj, 'var_key', $your_array);

但你必须记住一些事情

  • PHP会从memcache序列化/反序列化数组,所以如果你有很多行,那么实际查询数据库可能会慢一些
  • 你不能进行任何过滤( NO SQL ),如果你想过滤一些你必须自己实现这个过滤器的项目,它可能会比数据库引擎表现更差。
  • memcache不会存储超过 1兆字节 ...

我不知道你试图实现什么,但memcache的一般用途是:

  • 存储SQL /耗时处理的结果,但生成的行数应该很小
  • 存储一些预先创建的(X)HTML blob以避免数据库访问。
  • 用户会话存储

答案 1 :(得分:0)

拉​​斯,

听起来好像使用存储引擎设置为 MEMORY 的MySQL表可能是您的选择。

基于RAM的表为您提供了使用SQL的灵活性,还可以防止由于大量读/写(如memcached)导致的磁盘抖动。

但是,基于RAM的表非常不稳定。如果表格中存储了任何内容而没有刷新到基于磁盘的表格,那么你就会失去权力......好吧,你只是丢失了数据。话虽这么说,确保你每隔一段时间刷新一个真正的基于磁盘的表。

此外,使用内存表的另一个好处是可以存储所有典型的MySQL数据类型,因此没有1MB的大小限制。