search - 存储和搜索对象事务的最佳方式是什么?

标签 search transactions oop storage

我们有一个体面的面向对象的应用程序。每当应用程序中的对象发生更改时,对象更改都会保存回数据库。然而,这已经变得不太理想了。

目前,交易被存储为一个交易和一组交易LI。

事务表具有 who、what、when、why、foreignKey 和 foreignTable 字段。前四个是不言自明的。 ForeignKey 和 foreignTable 用于确定哪个对象发生了变化。

TransactionLI 具有时间戳、 key 、val、oldVal 和 transactionID。这基本上是一个键/值/旧值存储系统。

问题是这两个表用于应用程序中的每个对象,所以它们现在是相当大的表。将它们用于任何事情都很慢。索引只有这么多帮助。

所以我们正在考虑其他方法来做这样的事情。到目前为止我们考虑过的事情:
- 按时间戳之类的方式对这些表进行分片。
- 对两张表进行非规范化并将它们合并为一张。
- 以上两者的结合。
- 在更改后序列化每个对象并将其存储在颠覆中。
- 可能是别的什么,但我现在想不起来。

整个问题是我们希望有一些机制来正确存储和搜索事务数据。是的,您可以强制将其输入关系数据库,但实际上,它是事务数据,应该相应地存储。

其他人都在做什么?

最佳答案

我们采取了以下方法:-

  • 所有对象都被序列化(使用标准的 XMLSeriliser),但是我们用序列化属性修饰了我们的类,这样生成的 XML 就会小得多(例如,将元素存储为属性并在字段名称上删除元音)。如有必要,可以通过压缩 XML 来更进一步。
  • 通过 SQL View 访问对象存储库。该 View 前面有许多结构相同但表名附加了 GUID 的表。当前一个表达到临界质量(预定的行数)
  • 时会生成一个新表
  • 我们每晚运行一个归档例程,生成新表并相应地修改 View ,以便调用应用程序看不到任何差异。
  • 最后,作为通宵例行程序的一部分,我们将不再需要的任何旧对象实例归档到磁盘(然后是磁带)。
  • 关于search - 存储和搜索对象事务的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/268920/

    相关文章:

    python - 搜索具有嵌套值的树结构?

    python - 如何检查有序的非连续子序列是否在数组中? Python

    oracle - ADO.NET,在没有事先提交或回滚的情况下关闭 OracleConnection : Will it leak?

    python - Redis 向事务中的集合添加元素值

    c# - 如何使用一些自定义方法创建只是 List<string> 的类?

    mysql - MySQL 中的深度优先搜索

    mysql - SQL 触发器是否按顺序运行?

    oop - 初始化对象的设计模式?

    c++ - 在 C++ 中调度异常

    c# - 如何使用 OneDrive SDK 按文件哈希搜索