首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MongoDB记录文件访问

问使用MongoDB记录文件访问
EN

Stack Overflow用户
提问于 2012-08-27 19:43:05
回答 2查看 265关注 0票数 1

我正在设计我的第一个MongoDB (和第一个NoSQL)数据库,并希望在集合中存储有关文件的信息。作为每个文件文档的一部分,我想存储文件访问(读和写)的日志。

我正在考虑创建一个日志消息数组作为文档的一部分:

代码语言:javascript
复制
{
    "filename": "some_file_name",
    "logs" : [
        { "timestamp": "2012-08-27 11:40:45", "user": "joe", "access": "read" },
        { "timestamp": "2012-08-27 11:41:01", "user": "mary", "access": "write" },
        { "timestamp": "2012-08-27 11:43:23", "user": "joe", "access": "read" }
    ]
}

每条日志消息都将包含一个时间戳、访问类型和访问文件的人员的用户名。我认为这将允许非常快速地访问特定文件的日志,这可能是对日志执行的最常见的操作。

我知道MongoDB有16M字节的文档大小限制。我认为访问非常频繁的文件可能会突破这一限制。

有没有更好的方法来设计这种类型的日志记录的NoSQL模式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-27 20:09:44

让我们首先尝试计算一条日志记录的平均大小:

时间戳字= 18,时间戳值= 8,用户字= 8,用户value=20 (10个字符,我猜是最大值(或者肯定是平均值)),访问字= 12,访问值10。所以总共是76个字节。因此,您可以拥有大约220000的日志记录。

一半的物理空间将由字段名称使用。如果您将timestamp = t,user = u,access=a命名为timestamp=t,user=u,access=a --您将能够存储大约440000的日志项。

所以,我认为这对大多数系统来说已经足够了。在我的项目中,我总是尝试嵌入而不是创建单独的集合,因为这是使用mongodb实现良好性能的一种方式。

将来,您可以将日志记录移动到单独的集合中。此外,为了提高性能,您可以在文件文档中保存30条最后的日志记录(简单地对它们进行非规范化处理),以便在收集日志的同时进行快速检索。

另外,如果你要使用一个集合,请确保在你不需要的时候不加载日志(你可以在mongodb中包含/排除字段)。还可以使用$slice进行分页。

最后一件事:享受mongo!

票数 2
EN

Stack Overflow用户

发布于 2012-08-27 20:00:19

如果您认为文档限制将成为一个问题,那么几乎没有其他选择。

最明显的方法是为每个日志简单地创建一个新文档。

因此,您将拥有一个集合“日志”。使用此模式。

代码语言:javascript
复制
{
    "filename": "some_file_name",
    "timestamp": "2012-08-27 11:40:45", 
    "user": "joe", 
    "access": "read"
}

查找"joe“读取了哪些文件的查询将类似于

代码语言:javascript
复制
db.logs.find({user: "joe", access: "read"})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12141284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档