【发布时间】:2015-12-15 13:33:55
【问题描述】:
我正在寻找:
- 类似于键值映射的可变集合的接口,它将以某种方式保留单个元素的先前状态,即可以获取已知其键的元素的所有先前和当前状态。
- 此类接口的实现,最好在某种数据库或其他一些持久性存储中提供支持。
Slick 数据库访问工具包确实允许像访问常规 Scala 集合一样访问 SQL 数据库,但是,它不包括访问集合中条目的任何历史状态。例如,您可以这样做:
suppliers(42) // => gets current state of a supplier with ID=42
suppliers.get(42) // => gets current state or None if not found
但您无法获得所有先前状态的列表,也无法通过某种历史 ID 获得特定的历史状态。我浏览过Scala collection overview,似乎他们都没有提供这样的API。符合Map[T] 接口的所有内容在获取元素时仅返回单个(最新、当前)值T。
这个概念在多个数据库后端实现,例如:
- Are old data accessible in CouchDB? — 讨论在 CouchDB 中保留历史(版本控制)数据。
- Ways to implement data versioning in MongoDB — 在 MongoDB 中讨论相同的内容。
- Ways to implement data versioning in Cassandra — 在 Cassandra 中也是如此
其他语言也有不少现成的解决方案,例如:
- Vermongo — 用于 MongoDB 和 Java
- mongodb-revision-objects — 用于 MongoDB 和 Java
- mongoid-history — 用于 MongoDB 和 Ruby
- couchbase-how-to-versioning — 用于 Couchbase 和 Java
【问题讨论】:
-
是否也可以使用其他后端(或仅标签中的后端)?
-
@Beryllium 绝对有可能,它更多的是寻找标准接口而不是单一的现成解决方案。
标签: mongodb scala collections cassandra couchdb