返回首页
搜 索
400-77-456-22
英米加集团
领先RFID产品与物联网解决方案专家
INMIGA group
智慧城市
智能交通
[译]Uber是如何使用MySQL设计可扩展性数据存储的
来源:英米加集团 | 作者:inmiga | 发布时间: 3617天前 | 2509 次浏览 | 🔊 点击朗读正文 ❚❚ | 分享到:

  在其它用例中,Uber在BASE列写入Mezzanine实例后,使用Schemaless的触发器来进行结账操作。针对上面的例子,当trip_uuid1的BASE列被写入后,我们的支付服务被BASE列的触发器触发,获取这个cell,然后尝试用信用卡支付该行程。无论成功与否,信用卡支付的结果都会回写如Mezzanine的STATUS列。通过这种方式实现了支付服务于行程创建的解耦,Schemaless扮演了一个异步事件总线的角色。

  索引的易用性

  最后,Schemaless支持在JSON blob中的字段上定义索引。当这些预定义的用于找到cell的字段与查询的参数相匹配时,就会用到索引。索引查询效率很高,因为索引查询只需要访问一个单一的分片来找到需要返回的cell的集合。事实上,查询还可以更深度的优化,因为Schemaless允许非标准化的cell数据直接加入索引中。索引中含有非标准化数据意味着索引查询在查询和取信息操作一起只需要查询一个分片。事实上,我们通常推荐Schemaless用户在可能需要的地方都把非标准数据加到索引当中,除非只需要直接用row key查询并取回cell。在某种意义上,这样一来我们用存储交换来了快速查询的性能。

  作为Mezzanine的一个例子,我们定义个了一个副索引来查询指定司机的所有行程。我们将行程的创建时间以及行程发生的城市非标准话加入到索引中。这样就可以查询一个司机在一个城市中一段时间中的所有行程。下面我们给出了driver_partner_index YAML 格式的定义,这是行程数据存储的一部分,定义在BASE列上 (这个例子用标准#符号添加了注释)。

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  table: driver_partner_index # Name of the index.

  datastore: trips # Name of the associated datastore

  column_defs:

  – column_key: BASE # From which column to fetch from.

电力能源
农林牧渔
航空航天
精益制造
快消零售
智能港口
司法监狱
仓储物流
安监消防
金融通信