8.1 Handling Relationships

来源:互联网 发布:python 有抽象类吗? 编辑:程序博客网 时间:2024/06/04 00:26

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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑浏览器卡顿怎么办 文档里输入不了怎么办 淘宝退款卖家不处理怎么办 抵押合同丢了怎么办 抵押合同丢失了怎么办 发票货物名称多怎么办 发票上少打一个字怎么办 发票名称带星号怎么办 小贷太多还不上怎么办 生日当天买保险怎么办 我挪用公司货款怎么办 车辆改名字保险怎么办 工伤报案周六日怎么办 五菱宏光s1门下沉怎么办 新手机版本更新怎么办 戴尔电脑开机黑屏怎么办 淘宝退货不发货怎么办 铝被酸腐蚀怎么办 新娘头饰氧化了怎么办 合金饰品变黑了怎么办 麻醉机fico2升高怎么办 快递被恶意投诉怎么办 顺风快递收件人拒收怎么办 手机联系人没了怎么办 收件人号码错了怎么办 收件人写错了怎么办 快递联系不到收件人怎么办 小孩烫伤有水泡怎么办 被烫伤的疤痕怎么办 微店别人下单后怎么办 月经超了七天怎么办 收件人不在指定地址怎么办 2017款宝来熄火后异响怎么办 我身高一八米怎么办呀 规格型号错了发票怎么办 合同签错了怎么办 柜子背板起泡怎么办啊 显卡红灯不亮怎么办 小米设置全英文怎么办 小米手机变英文怎么办 阿迪贝壳头变黄怎么办