Mongodb-';自我学习';索引?
这是我第一次使用Mongo的无模式设计,在同一个集合中存储具有不同(不可预测)结构的文档。通常我会避免这种情况,但我需要它的特殊要求Mongodb-';自我学习';索引?,mongodb,Mongodb,这是我第一次使用Mongo的无模式设计,在同一个集合中存储具有不同(不可预测)结构的文档。通常我会避免这种情况,但我需要它的特殊要求 // John stores pruducts, with pricing-related fields: db.myCol.insert({owner:"john", price:100, discount:5}) // Mary stores color preferences: db.myCol.insert({owner:"mary", color:"gr
// John stores pruducts, with pricing-related fields:
db.myCol.insert({owner:"john", price:100, discount:5})
// Mary stores color preferences:
db.myCol.insert({owner:"mary", color:"green", background:"white"})
当然,约翰会询问价格/折扣,而玛丽会询问颜色。
注意查询的“AND”结构非常简单。
问题是索引——我无法提前告诉用户将存储/查询哪些字段
目前,我可以时不时地手动检查日志,并手动添加/删除索引。但我突然想到,我可能不是第一个遇到这个问题的人——那么,有没有“自我学习”索引的选项,让我的手工工作自动化呢?例如,自动检测许多带有“颜色”的慢速查询(假设它们是简单且结构化的),并相应地添加索引
我很感激任何指点,无论是在Mongo内部还是外部工具。
到目前为止,我发现最有创意的想法是改变文档结构,这样我就可以使用数组索引(有效地索引所有内容),但如果有更优雅的解决方案,我将不胜感激
谢谢:)您可能想做的是“了解”正在执行的查询类型,以便知道要索引哪些字段 我建议设置l并进行一些日志分析,以便对“常用”字段和组合做出一些决策
db.setProfilingLevel(2)
这将记录所有的操作
您可能还对MongoDB的一名员工的行为感兴趣
该套件实际上由不同的员工“内部”使用,以帮助进行日志分析
值得一试
我无法预先告知用户将存储/查询哪些字段
闻起来像是一个重要的价值商店
其美妙之处在于,您可以动态索引任意数量的字段和数据,并对其进行搜索,即用户定义的字段
例如,您的文档将是:
{
_id: {},
owner: 'John',
fields: [
price: 100,
discount: 5
]
}
您可以在文档的字段键上建立索引,并使用$elemMatch
查询用户动态字段
当然,这只是设置键值存储的一种方法,您最习惯看到的方法是使用键k
和v
将键名和键值存储为值
这还允许您查询这些字段的实际名称以及其他一些niefty内容
因此,键值存储可能正是您在这里寻找的
编辑
讽刺的是,我实际上并没有读到:
到目前为止,我发现最有创意的想法是改变文档结构,这样我就可以使用数组索引(有效地索引所有内容),但如果有更优雅的解决方案,我将不胜感激
不幸的是,即使在arr为此类查询设计的技术中(Memcached就是其中之一),它们实际上采用了这种结构,有效地索引了一个数组,但它只是对您隐藏起来。非常感谢,至少通过确认这种方法,您为我节省了数小时寻找不存在的替代方法的时间。衷心感谢:)非常感谢,我会试试的。