我需要设置某种具有搜索功能的电子商店。
对于每个搜索请求,我都要查询这样的结构:
产物:
-name
标签都有效
--tag
-ingredients
--ingredient
---标签
----标签
---选择
----选项
-----选项细节
-variants
--variant
---标签
----标签
---选择
----选项措施
----价值
---价格
现在想象一下查询的数量......数据库是规范化的(我想是第二级)。 在我看来,这里一个明显的解决方案是将每个获取的模型结果集(产品集,成分集,属性集,标记集等)存储在内存中很长一段时间(产品及其属性不经常更新而且仅由管理员)并从那里进行查询。
那你觉得怎么样?有没有更好的方法来减少数据库查询计数?
我想到的另一个选择是使用sphinx,但我根本不需要全文搜索,只需要与标记字段完全匹配。
提前谢谢!
答案 0 :(得分:1)
在我的Google App Engine应用程序中,我通常会将数据存储区中的内容移动到内存缓存中并与其一起使用,因为查询数据可能需要花费大量时间。在我的例子中,MemCache返回数据并且CPU上的负载比访问数据的负载少,后者可以通过大量查询直到找到它想要的内容。
我建议在memcache上设置一个长时间超时,以便memcache不会比你期望的更频繁地刷新它。我认为最大时间是1个月,但通常设置几天就足够了。
如果产品的数据已更新,您可以随时添加代码来刷新内存缓存,以便再次执行数据库命中,但这次只执行一次