我正在考虑使用 cockroachdb 以具有 ACID 保证的第三范式写入数据。所以所有的写入都会被转移到 cockroachdb。
读取都可以是基于对 Cassandra 的行键的点查找。我相信这样的读取设置将消除对 redis 缓存的需要,因为 Cassandra 本身会提供快速读取。因此 Cassandra 表将根据访问路径进行非规范化。
可能存在从 cockroachdb 规范化模式中的插入/更新/删除到插入/更新/删除到 cassandra 非规范化模式的基于事件的同步。
问题一:
这种读/写分离是否适合使用 cockroachdb 的有效用例?目的是减少连接并实现快速读取和写入。Cockroachdb 成为获取事件源类数据的单一事实来源。而 cassandra 和 elasticsearch 等其他数据库最终成为保持同步的查询投影。
问题2 :
这种设置是否适合需要以原子方式完成 N 语句的金融交易?根据我的理解,假设有 N 个 SQL 语句在 cockroachdb 3NF 模式中以事务方式完成。在此之后,读取发生在 Cassandra/ElasticSearch 中,由于同步延迟,它们尚未同步。在这种最终一致性场景中,如果用户发送另一个命令以从其他机器并行获得相同的结果,这将转到命令处理程序,该处理程序将在 cockroachdb 中查找。我认为由于 CockroachDb 符合 ACID,我们将确保在查找 cockroachdb 后的命令验证步骤中使命令无效。我相信这个 cockroachdb 会抛出乐观锁异常,因为写入同一张表的事务已经在进行中。所以问题是 - 在这种情况下,
问题 3
我想到的最后一个用例是让 cockroachdb 扮演火花集群对 cassandra 的聚合作用。我们可以在 cockroachdb 中进行聚合,其中包含所有数据并存储在 cassandra 的预聚合表中。虽然 ElasticSearch 也能够进行聚合,但这里有一个问题 - 这个用例是否也听起来正确 wrt 使用 cockroachdb 而不是 elasticsearch 进行聚合?