2009-08-10 64 views
0

我需要设置某种具有搜索功能的电子商店。Memcache db模型使搜索更高效

对于每一个搜索请求,我要查询的结构是这样的:

产品:
-name
标签都有效
--tag
-ingredients
--ingredient
---标签
----标签
---选项
----选项
-----选项的详细信息
-variants
--variant
---标签
----标签
---选项
----选项措施
----价值
---价格

现在想象一下查询的数量......数据库被标准化(我想是第二级)。 在我看来,这里一个明显的解决方案是将每个提取的模型结果集(产品集,成分集,属性集,标签集等)存储在内存中很长一段时间(产品及其属性更新不经常和只有管​​理员)并从那里进行查询。

那么你怎么看?有没有更好的方法来减少数据库查询计数?

我想过的另一个选择是使用狮身人面像,但我不需要全文搜索,只需要与标签状的字段完全匹配。

预先感谢您!

回答

1

在我的Google App Engine应用程序中,我通常会将数据存储区中的内容移到内存缓存中并与其一起使用,因为查询数据可能需要很长时间。在我的情况下,MemCache将返回数据,并且在访问可以经历多次查询的数据之前,CPU上的负载较少,直到获得所需的数据为止。

我建议在你的memcache上设置一个很长的超时时间,这样memcache就不会比你所期望的更频繁地刷新它。我认为最高时速可达1个月,但通常情况下设定几天就足够了。

您可以随时添加代码以刷新内存缓存如果产品数据已更新,你做的DB再次命中,但只有一次,这一次

+1

+1 - 只是我想补充的是,他将要设置适当长的缓存超时。 Django + memcached的摇滚乐,特别是你在缓存中控制粒度的种类繁多。 – 2009-08-10 12:20:08

+0

不能同意更多。我没有超时,因为我认为这是一个给定的:)我更新了我的答案 – AutomatedTester 2009-08-10 12:35:43

+0

最大值是“永远”(意思是,直到'memcache'重新启动),通过设置过期到'0'得到。 – Nate 2009-08-10 13:57:17