21.1. Lambda数据存储概述¶
Lambda数据存储适用于涉及频繁数据更新和长期存储的高级用例。例如,如果要存储正在进行的GPS轨迹,则可以将每个轨迹建模为单个轨迹 SimpleFeature
用一条线串几何。收到GPS坐标时,您可以修改线字符串和摘要属性,然后更新 SimpleFeature
使用 DataStore.getFeatureWriter(filter, Transaction.AUTO_COMMIT)
。在传统的 DataStore
,这可能是一个昂贵的操作,因为它需要在写入之前进行同步查询。Lambda数据存储使用ApacheKafka的有序日志,允许在不查询的情况下进行更新写入。
21.1.1. 基本架构¶
Lambda数据存储由最近更新的内存缓存和用于长期存储的委托数据存储组成。为了跨实例同步,每次写操作都会向Kafka主题发送一条消息。每个数据存储实例使用主题并加载 SimpleFeature
存入其内存缓存中。在给定特征的可配置生存时间没有任何更新之后,该特征将被持久保存到委托数据存储并从高速缓存中删除。Lambda数据存储实例使用ApacheZooKeeper来同步缓存状态,确保一个功能只写入一次。针对存储的查询将合并来自缓存和长期存储的结果。
21.1.2. 替代解决方案¶
如果正在添加功能,但随后没有更新,则可以直接使用Acumulo、HBase或Cassandra数据存储,而不会增加Kafka的复杂性。Lambda数据存储仍然可以用作最新功能的内存缓存。
如果功能不需要长期存储,则可以使用Kafka数据存储,而不需要管理持久功能的复杂性。Lambda数据存储仍可与一起使用 persist
残疾。
21.1.3. 与其他数据存储区集成¶
Lambda模式可以应用于现有的累积模式之上。此外,Lambda存储保存到Acumulo的功能可以通过Acumulo数据存储进行访问。这允许对Lambda商店中的数据使用现有的Acumulo工具和分析(GeoMesa Spark等)。