【问题标题】:Separation of Logic: Search, Database, & Application逻辑分离:搜索、数据库和应用
【发布时间】:2012-01-05 19:54:53
【问题描述】:

我正在尝试决定如何拆分我的逻辑。

我将我的主要业务逻辑放在 Node.js/Express 中,并且我一直在使用 Mongo 作为我的数据库。这很好用,但现在我需要实现一个非常强大的搜索系统,因为搜索是我网站最重要的功能之一。起初我对 Mongo 和 Couch 提供的缺乏支持和集成感到非常惊讶,但后来我意识到我试图让数据库做一些它不适合做的事情。

现在我正在考虑使用 Solr 或 ElasticSearch,但它们开始似乎能够执行 Mongo 可以执行的部分或大部分查询,只要我正确索引我的文档(并且根据它们的性质,我将索引每个文档的几乎每个属性)。也就是说,我在想也许我应该只使用一些非常简单的东西,比如 Redis,而依赖像 Solr/ElasticSearch 这样的强大搜索工具。

这看起来是一个明智的选择吗?另外,为什么没有适用于 Solr、Lucene 或 ElasticSearch 的 Nodejs 模块?

【问题讨论】:

  • 我还刚刚找到了RedBackJS,这看起来可能是适合我的解决方案,但我再次对一些更有经验的建筑师的智慧感兴趣。
  • 你大多只需要一个 HTTP 客户端库(最好是可以池连接的),你可以自己创建一个 solr 查询类(不要忘记做 URL 和 Solr 字符转义)。

标签: node.js mongodb solr full-text-search redis


【解决方案1】:

MongoDB + Solr(甚至更好的 ElasticSearch)对于将搜索作为最重要功能之一的应用来说确实是一个合理的选择。 MongoDB 不是为全文搜索而设计的,Solr (Lucene) 是。 Solr 并不意味着是一个记录系统(MongoDB 是)。

MongoDB vs Redis?很难说没有任何要求。至少为了临时查询,我会选择 mongo。在任何情况下,请确保您阅读了 Kyle Kingsbury 的精彩系列博客文章 jepsenmongodbredis 均已涵盖。

【讨论】:

  • MongoDB vs Redis,如果你意识到你需要在 Mongo 中使用 id 和代码连接,你会倾向于哪种方式(以免重复记录并避免疯狂的更新)?
  • @AgentZebra 不确定您所说的重复记录和疯狂更新是什么意思,猜想可能是尝试在“单个事务”中更新多个文档?
  • 嗨@milan,没错。
  • docs.mongodb.org/manual/reference/method/… 不适合您?这是应该更改数据库模型/模式的标志吗?或者您需要不同的数据模型/数据库,可能是图形 (neo4j) 或关系 (postgresql)?
猜你喜欢
  • 2015-05-28
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 2013-04-12
  • 2012-05-08
  • 1970-01-01
  • 2012-08-02
相关资源
最近更新 更多