我想看看将数据集从PostgreSQL迁移到Redis是否会对特定的搜索查询产生积极影响。不幸的是,我真的不知道如何组织键和值。
我想要的是,用户能够提供一个属性列表,并且应用程序以尚未输入的属性的升序提供一个项目列表。
例如:
Item #1 { prop1, prop2, prop4, prop7 } Query: "prop1 prop3 prop4 prop5"
Item #2 { prop7, prop8 } Result: Item #3
Item #3 { prop2, prop3, prop5 } Item #1
Item #2到目前为止,我想出的是:
#!/usr/bin/python
properties = (1, 3, 4, 5)
items = ["Properties:%s:items" % id for property in properties ]
redis.zunionstore("query:related_items", items)
redis.zinterstore("query:result", { "Items:all": 1, "query:related_items": -1 })这将构建一个与用户输入的Item相连接的排序的Property集(分数均为1)。然后,计算与所有Items的排序集的交集(其中每个值的分数是Property的数量)。如果在查询中提供了Item的所有Property,则将权重设置为创建分数0。
由于Item的数量约为600.000个条目,因此该查询大约需要4-6秒。有没有更好的方法来实现这一点?
发布于 2012-01-12 04:31:59
我想您正在寻找一种Python解决方案,但我最喜欢的是基于Ohm的数据库类比。考虑到Python和Ruby以及Ohm的exceptional documentation之间的相似性,您可能会找到一些灵感。
https://stackoverflow.com/questions/8552412
复制相似问题