我在日志搜索速度和磁盘大小方面遇到问题。它非常大,大约有 2.2 亿行和 25 GB 的磁盘大小,需要几分钟才能获取一些选择。
它是如何工作的?日志使用Sql Anywhere保存在数据库中,目前版本9,很快将迁移到11(我们尝试到12,但由于一些驱动程序和一些问题,我们回到了11)。
该日志包含两个表(名称更改为英文,以便这里的人能够理解):
日志表
Id、DateTime、User、Url、Action 和 TableName。 Action 是 used 所做的:插入/删除/更新 TableName 是数据库中的哪个表受到影响。
日志表字段
Id、LogTable_Id、FieldName、NewValue、OldValue。 LogTable_Id 是来自 LogTable 的外键。FieldName 是 DB 中表的字段。
重要的是要注意 NewValue 和 OldValue 是 varchar 类型。因为它记录了其他表(datetime、int 等)中的各种字段。
为什么它是这样制作的? 因为我们必须记录所有重要的事情。该系统是由交通机构部门制作的(我不知道它是否用正确的英语拼写,但现在你可以知道这是关于什么的),有时他们需要某种随机报告。
到现在为止,我们只做了一些 SQL 选择来制作我们的报告。但是,即使过滤了日期时间,也需要几分钟才能完成。不是经常抱怨的问题。
但是他们要求越来越多的报告表明,有必要在软件中创建一个带有漂亮和美观报告的功能。由于我们永远不知道他们的需求,我们必须回去记录并挖掘数据。
请求的某些信息仅在日志中。(例如,什么用户不正当地向某人提供了车辆的使用权)
到目前为止提出的一些想法:
想法 1: 我做了一些研究,并被告知使用 NoSql 使用CouchDB。但是我读到的很少,我觉得 NoSql 不能解决我的问题。我不能争论为什么没有经验。
想法 2: 将日志表与数据库或机器物理分离。
想法 3: 从每个表创建一个带有版本字段的镜像以保留历史记录。
如果需要,我想要一个宏优化或架构更改。