我获取了 geonames.org 并导入了他们所有德国城市和所有地区的数据。
如果我输入“Hamburg”,它会列出“Hamburg Center, Hamburg Airport”等等。该应用程序位于无法访问 Internet 的封闭网络中,因此我无法访问 geonames.org Web 服务并且必须导入数据。 :( 这座城市及其所有地区都是自动完成的。因此,每次按键命中都会产生 XHR 请求等。
现在我的客户问是否可以把世界上所有的数据都放在里面。最后,大约 5.000.000 行和 45.000.000 个替代名称等。
Postgres 每次查询需要大约 3 秒,这使得自动完成无法使用。
现在我想到了 CouchDb,已经用过它了。我的问题:
我想发布“Ham”并且我希望 CouchDB 获取所有以“Ham”开头的文档。如果我输入“Hamburg”,我希望它返回 Hamburg 等等。
CouchDB 是适合它的数据库吗?您可以推荐哪些其他数据库以低延迟(可能在内存中)和数百万数据集响应?数据集不会定期更改,而是静态的!
最佳答案
如果我对您的问题的理解正确,那么您可能需要的一切都已内置在 CouchDB 中。
- 获取名称以例如开头的一系列文档“火腿”。您可以使用 request with a string range :
startkey="Ham"&endkey="Ham\ufff0"
- 如果您需要更全面的搜索,您可以创建一个包含其他地点名称作为键的 View 。因此,您可以再次使用上述技术查询范围。
下面是一个 View 函数:
function(doc) {
for (var name in doc.places) {
emit(name, doc._id);
}
}
另请参阅有关 CouchDB typeahead and autocomplete search 的 CouchOne 博客文章以及关于 CouchDB autocomplete 的邮件列表讨论.
关于performance - 在 Postgres 或 CouchDB 中进行全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5285787/