【问题标题】:Memcache db models to make search more efficientMemcache 数据库模型使搜索更高效
【发布时间】:2010-11-18 06:35:33
【问题描述】:

我需要设置某种具有搜索功能的电子商店。

对于每个搜索请求,我都需要像这样查询结构:

产品:
-名称
-标签
--标签
-成分
--成分
---标签
----标签
---选项
----选项
-----选项详情
-变体
--变体
---标签
----标签
---选项
----选项测量
----价值
---价格

现在想象一下查询的数量...数据库已标准化(我猜是第 2 级)。 在我看来,这里一个明显的解决方案是将每个获取的模型结果集(产品集、成分集、属性集、标签集等)存储在内存中很长时间(产品及其属性更新不那么频繁且仅由管理员)并从那里进行查询。

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

我想到的另一个选择是使用 sphinx,但我根本不需要全文搜索,只需与类似标签的字段完全匹配即可。

提前谢谢你!

【问题讨论】:

    标签: django django-models memcached


    【解决方案1】:

    在我的 Google App Engine 应用程序中,我通常将数据从数据存储区移到内存缓存并在那里使用它们,因为查询数据可能需要很长时间。在我的例子中,MemCache 返回数据并且 CPU 上的负载比访问数据的负载要小,因为数据可以经过多次查询,直到它得到它正在寻找的东西。

    我建议在你的内存缓存上设置一个较长的超时时间,这样内存缓存就不会比你预期的更频繁地刷新它。我认为最长超时时间为 1 个月,但通常设置为几天就足够了。

    如果产品的数据已更新,您始终可以添加代码来刷新内存缓存,以便您再次执行 DB 命中,但这次只执行一次

    【讨论】:

    • +1 - 我唯一要补充的是他想要设置一个适当长的缓存超时。 Django+memcached 非常棒,尤其是您对缓存的各种粒度控制。
    • 完全同意。我没有设置超时,因为我认为这是给定的:) 我更新了我的答案
    • 最大值是“永远”(意思是,直到memcache重新启动),您可以通过将过期时间设置为0来获得。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2020-07-25
    相关资源
    最近更新 更多