我正在尝试在mongoDB中存储带有一组双打和整数(大约15-20)的记录。记录大多数(99.99%)具有相同的结构。
当我将数据存储在root这是一种非常结构化的数据存储格式时,对于 2250万条记录,该文件大约为 2.5GB 。但是,对于Mongo,数据库大小(来自命令show dbs
)大约是 21GB ,而数据大小(来自db.collection.stats()
)大约是 13GB 。
这是一个巨大的开销( Clarify:13GB vs 2.5GB,我甚至不谈21GB ),我想这是因为它同时存储了keys
和{ {1}}。所以问题是,为什么以及 Mongo 如何做得更小呢?
但主要问题是,这对性能有何影响?我有4个索引,它们是 3GB ,因此如果我将数据量增加一倍并尝试在内存中保留大量工作集,则在单个8GB机器上运行服务器可能会成为一个问题。
我是否应该使用SQL或其他数据库?或者如果有人尝试过,可能只是继续使用ROOT文件?
答案 0 :(得分:26)
基本上,这是mongo准备插入数据。 Mongo为数据执行存储的预定位,以防止(或最小化)磁盘上的碎片。此预分配以mongod
实例创建的文件的形式观察。
首先它创建一个64MB的文件,接下来的128MB,接下来的512MB,然后一直打开,直到达到2GB的文件(预分配数据文件的最大大小)。
mongo还有一些事情可能会怀疑使用更多磁盘空间,例如journaling ...
关于mongoDB如何使用存储空间的更多信息,您可以查看this page,具体来看标题为Why are the files in my data directory larger than the data in my database?的部分
您可以采取一些措施来最小化所使用的空间,但这些技术(例如使用--smallfiles
option)通常仅建议用于开发和测试用途 - 从不用于生产。
答案 1 :(得分:2)
问题:您应该使用 SQL 还是 MongoDB?
答案:视情况而定。
提问的更好方式:您应该使用关系数据库还是文档数据库?
答案:
我当前的软件项目同时使用两者。使用正确的工具完成工作!