

在其它用例中,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.
传真:0755 - 2799 6625
投诉:133-2299-1235
邮箱:sale@inmiga.com