使用RDBMS而不是ElasticSearch有什么好处?

时间:2015-07-02 19:08:40

标签: rdbms elasticsearch

有没有理由为什么人们想要使用除遗留因素,团队经验,成本等以外的RDBMS来设计系统? 从根本上说,RDBMS能比ES这样的文档存储系统做得更好吗? 我刚刚开始使用ElasticSearch,到目前为止看起来没有必要将RDBMS作为应用程序的主要数据存储。另外,我的经验是应用程序基本上将objects存储到数据库中,因此需要ORM,因为应用程序是用面向对象的语言编写的,是否有这样的情况呢?

2 个答案:

答案 0 :(得分:1)

数据完整性非常重要,具有事务并且预计不具有巨大扩展要求的系统最好建模为RDBMS。例如,用于公司财务,付款,账单,税收的财务报告系统。在RDBMS中建模关系并使用SQL进行查询很简单,而不是编写代码来加入和过滤您需要的来自不同文档的数据。

答案 1 :(得分:1)

我猜这是一个基于意见的强烈问题,尽管有一些确凿的事实:

RDBMS

  • 大多数RDBMS坚持使用ACID,这会带来交易,交易之间的隔离等等(参见https://en.wikipedia.org/wiki/ACID;还有更多优秀的帖子)
  • 大多数标准化的API,例如ODBC,JDBC,具有更高级别的抽象,例如Java世界的JPA
  • 不同操作系统的驱动程序,主要是提供商
  • 根据数据库系统的不同,有大量的调优选项(表空间,缓冲池......)
  • 大量第三方工具的现有集成
  • RDBMS仍然是一个众所周知的领域,大多数经理/开发人员/架构师/操作员知道如何处理它们
  • RDBMS有时会提供特定于供应商的功能(MySQL的InMemory表,PostgreSQL Key-Value-API以及许多其他功能)
  • 如果您运行具有多个线程的应用程序,则需要(或者您应该)使用连接池
  • 使用RDBMS(Oracle的RAC,MySQL通过DRBD)时,HA非常昂贵。
  • “Oracle DBA”几乎是一个标准化的职位描述
  • RDBMS为您解决了一些问题,您需要在ES中做额外的工作(例如以事务方式处理写入)

ElasticSearch

  • ES为每个文档提供原子性。保证文档一致并写入磁盘。由于没有多文档翻译,隔离在这里不适用(至少不是这样,你从RDBMS知道)
  • ES拥有自己的API,为所有可在各种操作系统上运行的主要编程语言提供客户端。无论您使用哪种操作系统,都始终拥有HTTP API选项。
  • ES可以使用更高级别的API,例如Spring Data ElasticSearch
  • 集成数量不断增加
  • 您不需要使用连接池,因为HTTP连接已关闭(但如果您使用Connection:Keep-Alive,则可以使用)
  • ES提供了许多有趣的内置功能,而RDBMS需要额外的插件/功能包(例如MySQL的空间数据扩展)
  • ES非常适合云/微服务的思维:只需添加一个节点即可。你是HA的一些控制台命令。
  • ES的认证操作较少(与RDBMS操作相比)
  • ES是一个相对较新的产品,因此有疑问的经理/开发人员/架构师/操作员可能反对它(基于意见的

希望,这个帖子不太基于意见和HTH。