我有一个3层架构,看起来大致如下:
客户 - >业务 - >数据
交易理想情况应该从哪里开始?
有一种观点认为交易应该只从数据层的顶部开始.Business层仅使用业务逻辑操作业务对象,并且从不了解事务.业务完成所有操作对象的工作,然后将它们交给数据层进行持久化.这是一种适用于较低层的RESTful哲学.
另一种想法是,交易应该从业务层的顶部开始.业务层定义了逻辑工作单元,而不是数据层,因为逻辑工作单元有时包含业务逻辑,而不仅仅是数据逻辑.
我确实喜欢尽可能降低交易问题.但我也发现,除非只是CRUD操作,否则可能需要额外的努力和设计挑战来尝试将业务逻辑保留在数据层之外.如果您使用大锤应用RESTful设计模式,则可以使应用程序具有非常少的非CRUD操作.
甚至还有第三种思想流派,即客户可以启动交易,以便在需要时可以组合多个业务运营.但现在客户正在定义工作单位?这不是一个商业问题吗?
第四个想法是说我的客户端可以只是SOA组件,可以参与即使在客户端之外启动的XA事务!
我们的开发人员希望某些标准更具体,而不仅仅是"在任何您想要的地方开始交易"
有没有人对这个问题有任何意见或建议?
谢谢!
我是 Cassandra 的新手,我一直在尽可能地阅读和尝试。
我遇到过文档说如果你愿意,你可以为每个查询创建 1 个表。因此,如果我有一个“客户”记录,其中包含需要查询的 4 个不同字段,那么我可以创建 4 个不同的表来执行此操作。
然后我遇到了一个称为“批处理”的功能,它似乎说如果我将它们放入批处理中,我可以事务性地进行 4 次更新。
但是我在文档中找不到任何明确的内容将所有部分整合在一起并说“您应该为每个查询创建 1 个表,并且您应该使用 Batch 来保持所有这些查询表同步。这是最佳实践.”
这是最佳做法吗?对于新手,我可以少一点“可以”,多一点“应该”:)
我曾与其他NoSQL数据库合作,这些数据库支持主键的"获取"概念,而不是"选择".
"获取"的优点是没有SQL/CQL/OQL /解析或处理的任何东西,因此速度要快得多.
在Cassandra API中是否有类似的东西,我可以通过主键"获取"整行,而Cassandra不必解析CQL?(或者CQL解析如此简单和快速,以至于它没有产生可测量的差异?)
我们决定(出于一长串技术原因)在将数据写入数据库之前对数据进行应用程序级加密。
这工作得很好,但在某些时候我们想轮换加密密钥。这意味着重写数据库中的每条记录。如果您的数据库有 500 亿条记录怎么办?
我不知道有任何数据库技术可以在合理的时间内重写 500 亿条记录而不会给数据库带来压力。也许某些分布式数据库可以,但如果您用大量更新来覆盖它们,它们往往会遇到压缩问题。
那么人们通常如何在大型数据库上轮换密钥呢?他们是否投入了大量硬件?或者他们只是等待几个月才能完成?他们从不轮换加密密钥吗?或者还有其他更好的解决方案吗?
我不会命名我们的数据库品牌,因为我愿意使用任何可以在不到一周内更新 500 亿条记录而无需使用大量硬件的数据库品牌。建立一个比我们处理重新加密流量峰值所需的大 1000 倍的庞大数据库实在是太浪费了。
谢谢!