【发布时间】:2014-09-19 21:54:51
【问题描述】:
我的文档如下:
{"url": "http://some-random-url.com/path/to/article"
"likes": 10
}
网址必须是唯一的。在url 上有一个唯一索引是个好主意吗? URL 可能很长,从而导致更大的索引大小、更多的内存占用和更慢的整体性能。从 url 生成散列(我正在考虑使用murmur3)并在其上创建唯一索引是个好主意。我假设碰撞的可能性非常低,如下所述:https://softwareengineering.stackexchange.com/questions/49550/which-hashing-algorithm-is-best-for-uniqueness-and-speed
有没有人认为这种方法有任何缺点?新文档将如下所示(在 u_hash 上具有唯一索引,而不是 url):
{"url": "http://some-random-url.com/path/to/article"
"likes": 10
"u_hash": "<murmur3 hash of url>"
}
更新
我不会对url 进行正则表达式查询。将只进行完整的 URL 查找。我更关心这种查找的性能,因为我相信 mongodb 也会在内部使用它来维护唯一索引,因此也会影响写入性能(+ 更长的索引)。此外,我的理解是 mongobd 对于长文本索引的性能不佳,因为它不是为此目的而设计的。不过我可能错了,它只能取决于该索引是否适合 RAM。有什么指点吗?
【问题讨论】:
-
我目前面临同样的问题,您是否能够弄清楚如何以散列格式存储网址?我的网址有 1000- 3000 个字符长,但独一无二,并且不断生成索引过大错误,
-
我的 URL 没有这么长,我最终在 URL 上创建了一个索引。如果您的大多数 URL 都大于 1000 个字符,您可能需要尝试文本索引:docs.mongodb.com/manual/core/index-text。现在确定它的性能如何,因此您需要尝试一下。另一种方法可能是您在保存之前通过自己实现缩短器或使用第三方缩短 URL,然后将缩短的 URL 编入索引。
-
你有没有想到什么是最好的,因为 URL 正在扼杀我的表现
-
这个问题太老了,不记得了,但我想我们对 URL 的索引没有问题,尽管我认为我们的 URL 不是太长(可能是内部 URL)。如果您的 URL 太长并且索引占用了您所有的内存,那么您可以尝试使用 URL 缩短方法或索引哈希。
标签: ruby-on-rails ruby mongodb indexing mongoid