- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
根据 this后复合索引在维度上更大(我找不到关于文档的太多信息,所以如果你能指出我那里,我将不胜感激)。
假设我必须通过像这样的地址集合来搜索整个地址(我们可以假设我将始终拥有集合和查询中的所有可用字段)
{
name: String,
street: String,
postcode: String,
City: String,
Country: String
}
我的问题是:复合索引应该有多大?如果复合索引比单个字段大,那么将所有值连接到所有对象的散列添加到所有对象,将单个索引添加到散列字段并通过它进行搜索(虽然听起来不像好的做法)?
最佳答案
If a compound index is bigger then a single field wouldn't it be better to add a hash of the concatenation of all values to all objects, add a single index to the hash field and search by that (although it do not sounds like a good practice)?
这些完成不同的事情。复合索引具有顺序,并且该顺序具有效果。例如,索引 { 'country' : 1, 'city' : 1, 'postcode' : 1 }
将允许搜索特定国家特定城市的所有地址。散列不能做到这一点 - 散列仅支持精确匹配。
我根本不认为这是一种不好的做法,它只是一个非常狭窄的用例。请记住,拼写、额外空格等的每一个细微差异都会导致不同的哈希值,您甚至无法回答简单的问题,例如“我们在 X 国存储了多少个地址?”。但如果您不需要它,为什么不呢?
顺便说一下,MongoDB 内置了对此的支持。如果地址是嵌入的,使用 hashed index on the entire subdocument将完成你所需要的:
MongoDB supports hashed indexes of any single field. The hashing function collapses embedded documents and computes the hash for the entire value,
例如:
> db.hash.insert( {"name": "john", "address" : { "city" : "Chicago", "state":"IL",
"country" : "US" } } );
WriteResult({ "nInserted" : 1 })
> db.hash.createIndex( { "address" : "hashed" } );
...
>
> This query uses the index and finds the document:
> db.hash.find({"address" : {"city" : "Chicago", "state": "IL", "country" : "US" } } );
>
> // this query wont find the document b/c of missing state, but is still fast (IXSCAN)
> db.hash.find({"address" : {"city" : "Chicago", "country" : "US" } } );
关于performance - 就空间消耗而言,MongoDB 复合索引与单字段索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29006888/
我尝试通过正则表达式将文本中的单引号更改为双引号。 (单字)示例:我走了。 You gona fly to planet 'Ziqtos' => 我需要在 I'm 中保留单引号,并在 You gona
我正在构建一个 API,其中大部分将包含 JSON 和 HTML 内容。但是一些非常具体的端点只呈现 true 或 false,并且还在 POST 中接受 true 或 false。这是请求或响应的整
我是一名优秀的程序员,十分优秀!