8.1 Handling Relationships

Handling Relationships (原文译文)

  1. 应用端连接(Application-side Joins)(原文,译文)
  2. 数据非规范化(Denormalizing Your Data)(原文,译文)
  3. 字段折叠(Field Collapsing)(原文,译文)
  4. 非规范化和并发(Denormalization and Concurrency)(原文,译文)
  5. 解决并发问题(Solving Concurrency Issues)(原文,译文)

现实世界中,关联关系很重要:博客文章有评论、银行账户有交易、顾客有银行账户、订单有订单项、文件夹有文件和子文件夹。

关系型数据库是专门设计用于管理关系的——这可能对你来说并不奇怪:

  • 每一个实体(在关系型数据库中成为行,row)可以通过主键(primary key)唯一确定
  • 实体是规范化的。每一个独特的实体只存储一次,其他关联的实体只存储它的主键。改变实体的信息只需要在一个地方进行更改
  • 实体的更改具有原子性(Atomic)、一致性(Consistent)、隔离性(Isolated)、持久性(Durable)。(查看更多:ACID Transactions(wikipedia)ACID(百度百科)
  • 大多数关系型数据库支持跨多个实体的ACID事物

关系型数据库一方面对全文检索(full-text search)的支持较弱,另一方面也确实有它们的限制。在查询时关联实体是非常昂贵的——关联的实体越多,查询越昂贵。关联不同硬件上的实体关联查询是极为昂贵的,以至于这是不切实际的。这就对在单一的服务器上能够存储的数据量造成了限制。

Elasticsearch,和大多数NoSQL一样,把世界看做是扁平化的。一个索引是扁平化地存储各个独立的文档。一个单独的文档应该包含决定它能否被搜索到的所有信息。

即使改变ES中的某一个单独的文档具有 ACID ,操作涉及到多个文档就不是这样了(译者注:操作涉及到ES中的多个文档不具备ACID)。如果操作部分失败了,索引是没有办法恢复到它的前一个状态的。

扁平化(FlatWorld)具有下面的优势:

  • 索引速度快 并且 无锁(lock-free)
  • 搜索速度快 并且 无锁(lock-free)
  • 海量的数据可以分布在多个节点,因为每一个文档与其他文档是相互的独立的

但是关系(relationship)确实是非常重要的。因此我们需要联系扁平的世界(FlatWorld)和真实世界。在ES中,我们使用四种技术管理相关联的信息:

  • 应用端连接(Application-side joins)(原文,译文)
  • 数据非规范化(Data denormalization)(原文,译文)
  • 嵌套对象(Nested objects)(原文,译文)
  • 父子关系(Parent/child relationships)(原文,译文)

通常最终的解决方案需要混合使用这几种技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值