我们在那里有一个新项目,用于索引大量数据并提供实时数据.我也有复杂的搜索方面,全文,地理空间...

第一个原型是在MongoDB中建立索引,然后是Elasticsearch,因为我读到Elasticsearch不会对存储的文件应用校验和,索引不能完全信任.

我在Elasticsearch中找不到关于这些功能的最新答案

谢谢

推荐答案

用Mongo代替/与ES一起讨论论点:

  1. 用户/角色管理.

    • 内置于MongoDB.可能不适合您的所有需求,可能在某些地方很笨拙,但它确实存在,而且在相当长的一段时间前就已经实现了.
    • ES中唯一安全的东西是shield.但它只用于生产使用的黄金/白金订阅.
  2. 模式

    • ES是无模式的,但它建立在Lucene之上,并用Java写成.这个工具的核心思想是索引和搜索文档,这种方式需要索引的一致性.在后端,所有文档都应该安装在flat lucene index中,这需要了解ES应该如何处理嵌套的文档和值,以及应该如何组织索引以保持速度和数据完整性/一致性之间的平衡.使用ES需要你经常记住一些关于模式的事情.也就是说,由于你可以在不预先放置相应映射的情况下将几乎任何内容索引到ES,ES可以动态地"猜测"映射,但有时会出错,有时隐式映射是有害的,因为一旦放置,就无法通过重新索引整个索引来更改.因此,最好不要将ES视为无模式存储,因为您可以在某段时间内使用rake(这将是pain:),而是将其视为模式密集型存储,至少在处理文档时,可以将其分割为具体字段.
    • 另一方面,Mongo可以"咀嚼,不留下任何碎屑",几乎任何你放进go 的东西.大多数查询都可以正常工作,直到您还记得Mongo将如何从JavaScriptAngular 处理数据.由于JS是弱类型的,所以可以使用真正无模式的工作流(如果需要的话,当然可以)
  3. 处理非表数据.

    • ES仅限于在不将数据放入搜索索引的情况下处理数据.当您需要存储和检索一些额外的数据(与要搜索的数据相比)时,这个解决方案已经足够好了.
    • MongoDB支持gridFS.这使您能够在同一界面后面处理大量数据.也就是说,您可以在Mongo中存储二进制数据,并从代码的Angular 在同一个接口中检索它.

Mongodb相关问答推荐

用其他集合中的文档替换嵌套文档数组中的值

如何在MongoDB中通过限制和跳过查找项进行匹配

Mongo DB-如果一个特定字段有多个文档匹配,则更新文档字段

在数组对象 Mongodb 中仅 Select 需要的数组

找到一个用户,然后使用 MongoDB 根据他们的总分获得他们的排名

如何将交易列表变成 token 数量的对象?

MongoDB 聚合使用 $match 和 $expr 和数组

MongoDB:如何将所有文档合并到聚合管道中的单个文档中

为什么一个 mongodb 副本集需要奇数个投票 node ?

实现 twitter 和 facebook 之类的主题标签

如何将记录从一个 mongo 数据库插入另一个?

更新文档中的数组时,如何在 MongoDB 和 C# 中使用 $push 更新修饰符

findOneAndUpdate 和 findOneAndReplace 有什么区别?

如何使用python将csv数据推送到mongodb

在 mongoDB 中存储 java 8 LocalDate

pymongo 排序和 find_one 问题

MongoDB - 清除嵌套数组中的元素

Mongodb 约定包

适用于 Windows 10 64 位的 MongoDB 下载

Mongoose:Model.create 和 Collection.insert 有什么区别