【发布时间】:2008-11-06 14:43:12
【问题描述】:
我们有一个大小合适的面向对象应用程序。每当应用程序中的对象发生更改时,对象更改都会保存回数据库。然而,这已经变得不太理想了。
目前,交易被存储为一个交易和一组交易LI。
事务表包含 who、what、when、why、foreignKey 和 foreignTable 字段。前四个是不言自明的。 ForeignKey 和 foreignTable 用于确定哪个对象发生了变化。
TransactionLI 具有时间戳、密钥、val、oldVal 和 transactionID。这基本上是一个 key/value/oldValue 存储系统。
问题是这两个表用于应用程序中的每个对象,所以它们现在是相当大的表。将它们用于任何事情都很慢。索引只能起到这么大的作用。
所以我们正在考虑其他方法来做这样的事情。到目前为止我们考虑过的事情: - 按时间戳之类的方式对这些表进行分片。 - 对两张表进行非规范化并将它们合并为一张。 - 以上两者的结合。 - 在更改后序列化每个对象并将其存储在颠覆中。 - 可能是别的什么,但我现在想不起来。
整个问题是我们希望有一些机制来正确存储和搜索交易数据。是的,您可以强制将其输入到关系数据库中,但实际上,它是事务数据,应该相应地存储。
其他人都在做什么?
【问题讨论】:
-
您使用的是什么数据库?您可能想研究 SQL 2008 中的 SQL 更改跟踪。它不会跟踪您的对象,但会跟踪您的数据更改并对其进行版本化。
标签: search transactions oop storage