我目前正在开发替代数据存储的概念证明。之所以需要增强一个以读取为主的集群 webapp,也是因为我想摆脱有时过于复杂的 ORM+RDBMS 解决方案的痛苦。
总的来说,这个想法非常类似于具有持久性的分布式缓存(让集群成为 SoR),但是:
- 希望能够通过 id(提供类和 id)检索任何对象及其子对象 [仅开始,因为主要查询部分已在我的应用程序中使用 lucene 解决]。
- 需要有类型映射的映射(~关系世界中的表),并在其中分发“脱水”存储对象的映射(通过反射深度克隆展平对象图)
- 一个 bin 日志(例如 Prevayler)
- 如果整个集群出现故障,最终恢复
- 开发(以及重构代码/更改结构的能力)
- 可能出于其他目的异步处理(报告等)
- 最终稍后尝试集成静态类型查询机制,如 LINQ、Jaque 或 H2 的 JaQu / 参见 ODBs / Lucene (?)
- 它必须是事务感知的(虽然不确定“JTA 类型”)
我计划用 Hazelcast(我喜欢它超级简单的 API)或 Terracotta(我从未使用过——但我知道他们的“最佳位置”,中期数据)来实现这个想法。如果你愿意,我的目标是或多或少地做 Jonas 曾经写过的博客。使用其中之一,存储的数据大致必须适合集群的 JVM 堆的总和。
这应该很容易扩展,可以避免关系阻抗不匹配(即保存为 ODB)和 JDBC + I/O 开销。
您是否知道其他工具/框架或其组合已经提供了类似的功能,而我忽略了?你能建议其他方法来解决这个“摆脱数据库”吗?你已经在这个想法中看到了哪些缺陷?在并发方面考虑 Scala 而不是 Java 是否有意义?
Couch DB、Neo4j、HyperTable、HBase 等非关系型数据存储怎么样?
一个月前有人问过一个类似的问题——但没有具体的解决方案。
顺便说一句,我刚刚偶然发现了Enterprise Data Fabric的概念,令我惊讶的是,它描述了很多这样的想法。