【发布时间】:2013-12-10 19:28:47
【问题描述】:
我的用例是资源的审计日志记录。为了讨论,考虑一个非常简单的模式:资源名称、访问时间戳和访问用户名。有了所有 NoSQL 选项,我想知道哪种解决方案最适合我的用例?
资源名称保存在图形数据库 (Neo4j) 中,虽然我们可以将顶点和边添加到连接到资源顶点的审计顶点,但审计信息可能很大,我担心会污染相对简单的图形。
我目前倾向于使用 MongoDB 或 Couchbase 等文档数据库,其中每个资源都有自己的文档,审计日志是该文档中的一个简单数组,可以附加到该文档中。我担心 I/O 可能会成为问题,因为审核日志会变长并且必须在应用服务器和数据库之间交换整个文档。我认为最小化这种情况的一种方法是使每个审计条目成为自己的文档,并将其 ID 附加到父资源文档数组。
目前不需要搜索审计日志,但是对于文档数据库,我觉得以后集成 Elastic Search 是一条不错的途径。
似乎 Redis 可能更适合我的用例,但数据持久性似乎不像其他解决方案那样严格。
从概念上讲,我想我正在寻找任何支持“附加”API 方法调用且无需交换大量信息的 NoSQL 解决方案。具有讽刺意味的是,这基本上是一条 SQL INSERT 语句,但我担心传统的 RDBMS 无法满足我的规模要求。审计表会很快变大,我宁愿利用最新最好的 NoSQL 方法进行分区/分片。
感谢您对日志附加用例的任何见解!
这些似乎是类似的 SO 问题:
Database design for audit logging
谢谢, 贾里德
【问题讨论】:
-
每秒有多少个请求?您必须将数据保留多长时间?老实说,postgres 或 mysql 会很好,只是存档旧数据。分析数据也会更容易。
-
很好的问题,但遗憾的是没有像样的回答,您最终选择了哪种解决方案?