Questions tagged «mongodb»

MongoDB的所有版本-可伸缩,高性能,开放源代码,面向文档的数据库。

4
MongoDB上的分片和复制之间的区别
我只是对分片和复制的工作方式感到困惑。 复制:MongoDB中的副本集是一组维护相同数据集的mongod进程。 分片:分片是一种用于在多台计算机之间存储数据的方法。 根据我的理解,如果有75 GB的数据然后通过复制(3台服务器),它将在每个服务器上存储75GB的数据,这意味着Server-1上为75GB,Server-2上为75GB,server-3上为75GB。如果我错了)..并通过分片将其存储为服务器1上的25GB数据,服务器2上的25Gb数据和服务器3上的25GB数据。(对吗?)...但是后来我在本教程 分片存储数据。为了提供高可用性和数据一致性,在生产分片群集中,每个分片都是一个副本集 由于副本集为75GB,而分片集为25GB,那么它们如何等效……这让我非常困惑……我认为我在此方面缺少了一些很棒的东西。请帮助我。
77 mongodb 

5
哪个数据库可以处理数十亿/万亿记录的存储?
我们正在研究开发一种捕获和分析Netflow数据的工具,我们从中收集了大量的数据。每天我们都会捕获大约14亿条流记录,这些记录以json格式显示如下: { "tcp_flags": "0", "src_as": "54321", "nexthop": "1.2.3.4", "unix_secs": "1352234521", "src_mask": "23", "tos": "0", "prot": "6", "input": "105", "doctets": "186", "engine_type": "0", "exaddr": "2.3.4.5", "engine_id": "2", "srcaddr": "9.8.7.6", "dst_as": "12345", "unix_nsecs": "752265174", "sysuptime": "2943529544", "dst_mask": "24", "dstport": "80", "last": "2943523241", "srcport": "52672", "dpkts": "4", "output": "111", "dstaddr": "6.5.4.3", "first": "2943517993" …


3
从外壳检查存储引擎
我正在升级到3.0,并且在升级时遇到了一些问题。具体地说,尝试mongod通过进行启动时遇到错误ssh,它尝试使用默认值,dbpath而不是我在新的YAML配置文件中指定的默认值。我继续并重新启动了计算机,现在又重新启动mongod并运行了。在这一点上,我有点偏执,想知道是否有一种方法可以确保存储引擎wiredtiger来自外壳程序。

4
MongoDB的find和findone调用之间的区别
我正在一个项目上,我不确定find游标的工作方式和游标的工作方式之间是否有区别findOne。是findOne的包装find().limit(1)吗?我一直在寻找它,也许有人知道mongodb是否具有特殊的方法。我正在为mongodb使用PHP API,如果有所作为。
34 mongodb 

1
用于MongoDB的示例YAML配置文件?
在MongoDB的配置选项的文件列出了所有可以指定,但没有任何人有一组完全形成例如YAML格式的配置文件中各种角色的MongoDB实例的可用选项? 对于那些从头开始或希望测试最新配置文件格式的人来说,一组常见角色的示例将是一个非常有用的起点。
33 mongodb 

2
Mongodump:无法识别的字段“快照”
我正在使用mongo工具中的mongodump下载我的服务器的备份。但是,当我运行命令时,该命令将返回“无法识别的字段'快照'”。 完整的错误是: Failed: error reading collection: Failed to parse: { find: "data", skip: 0, snapshot: true, $readPreference: { mode: "secondaryPreferred" }, $db: "xxx" }. Unrecognized field 'snapshot'. Mongodump --version返回: mongodump version: built-without-version-string git version: built-without-git-spec Go version: go1.7.3 os: linux arch: amd64 compiler: gc OpenSSL version: OpenSSL 1.0.2g 1 Mar …

5
如何以超级用户身份输入Mongo或重置用户?
我在玩弄权限并将自己锁定在Mongo数据库之外。我很确定我是通过尝试显式添加对数据库的访问权限来完成此操作的,但是我改写了仅允许对数据库的权限的方法。因此,我实际上被锁定在Mongo数据库之外,如果我拥有添加用户特权,那么我阅读的所有内容都会告诉我如何创建超级用户。现在,我认为我没有任何拥有该特权的用户。有没有办法以所有访问权限进入数据库?我拥有服务器并具有root用户访问权限。
29 mongodb 

3
MongoDB使用太多内存
我们已经使用MongoDB已有几周了,我们看到的总体趋势是mongodb使用了太多的内存(远远超过了其数据集+索引的总大小)。 我已经阅读了这个问题和这个问题,但是似乎没有一个解决我所面临的问题,他们实际上是在解释文档中已经解释的内容。 以下是htop和show dbs命令的结果。 我知道mongodb使用内存映射的IO,因此基本上OS会处理内存中的缓存内容,并且从理论上讲,当另一个进程请求可用内存时,mongodb 应该释放其缓存的内存,但是从我们的观察来看,它不是。 OOM开始杀死其他重要进程,例如postgres,redis等。(可以看到,为解决此问题,我们将RAM增加到183GB,现在可以使用,但价格昂贵。mongo使用了约87GB的ram,几乎是整个数据集大小的4倍) 所以, 这样的内存使用量真的是正常的吗?(根据文档,WiredTiger最多将〜60%的RAM用于其缓存,但是考虑到数据集的大小,它甚至没有足够的数据量来占用86GB的RAM吗?) 即使预期内存使用量,在另一个进程开始请求更多内存的情况下,mongo为什么也不会放开分配的内存?在我们增加RAM并使系统完全不稳定之前,Linux oom不断将各种其他正在运行的进程(包括mongodb本身)杀死。 谢谢 !

1
Mongodb增量备份
我承担了为MongoDB复制集设置增量备份的任务,当然,作为起点,我用Google搜索了它,但在MongoDB文档上找不到任何内容,但是我确实在Stack Overflow上发现了这个问题,这鼓励开发自己的解决方案因为没有发现Tayra非常活跃。 我阅读oplog并意识到,开发一些东西来重播日志非常容易,但是事实证明,我并不需mongorestore要这样做。 现在,我有了一个使用bash脚本的可行解决方案,这很容易,这就是我在这里询问我的逻辑是否有缺陷的原因,或者将来会困扰我的原因。 下面是我的实现方式: 完整备份程序 锁定写入辅助成员 db.fsyncLock() 拍摄快照 记录操作日志中的最后一个职位 db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts 解锁写入 db.fsyncUnlock() 增量备份程序 锁定写入辅助成员 从完整(或最新增量)备份中记录的oplog位置转储oplog: mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }' 记录最新操作日志位置(与完整备份相同) 解锁写入 完整备份还原过程 停止的所有实例 mongod 将快照复制到将成为主文件夹的数据目录中,但请确保排除所有快照,local*并且mongod.lock 此恢复技术称为通过破坏镜像进行重新配置 开始小学 重新配置副本集 在没有任何数据的情况下启动辅助设备,让它们执行初始同步。或从具有新local数据库的新主数据库复制数据 恢复增量备份 当我们创建增量备份时,它像这样存储它: /mnt/mongo-test_backup/1/local/oplog.rs.bson /mnt/mongo-test_backup/1/local/oplog.rs.metadata.json …
26 backup  mongodb 

3
MongoDB MMAPv1与WiredTiger存储引擎
在mongoDB3中出现了一个新的存储引擎:WiredTiger。但是,MMAPv1仍然是Mongo中的默认选择。 一个可能不会比另一个更好,这通常是一个用例问题,并为工作选择了正确的工具。但是,哪种发动机最适合什么工作? 实际上,虽然MMAPv1是默认引擎,但 WiredTiger在几乎每个领域似乎都更好。它具有与MMAPv1 plus相同的功能: 更好的写入性能, 文档级并发, 压缩, 快照和检查点系统。 我在MongoDB的博客上找到了一个比较表: 因此,除非您使用Solaris,否则是否有理由不选择WiredTiger? 编辑 这是两个视频,详细介绍了WiredTiger和MMAPv1的内部 。

2
一起使用MongoDB和PostgreSQL
我当前的项目实质上是工厂文档管理系统的运行。 就是说,有一些皱纹(惊奇,惊奇)。尽管有些皱纹是该项目特有的,但我相信会出现一些一般性的观察和问题,它们没有规范的答案(无论如何我还是可以找到),并且适用于更广泛的问题领域。这里有很多东西,我不确定它是否适合StackExchange Q&A格式,但我认为这是a)一个可以回答的问题,b)不够具体,足以使社区受益。我的某些注意事项是我特有的,但我认为该问题对于决定使用SQL,NoSQL和两者的任何人都可能有用。 背景: 我们正在构建的Web应用程序包含本质上关系明确的数据以及面向文档的数据。我们也想吃点蛋糕。 TL; DR:我认为下面的#5通过了气味测试。你呢?有没有人有在单个应用程序中进行SQL和NOSQL集成的经验?我试图在下面列出解决此类问题的所有可能方法。我错过了一个有前途的选择吗? 复杂性: 有许多不同类别的文档。这些要求已经需要数十种不同的文档。这个数字只会增加。最好的情况是我们可以利用一种简单的领域特定语言,代码生成和灵活的模式,以便领域专家无需DBA或程序员的干预即可处理新文档类的添加。(注意:已经知道我们遵守格林斯潘的第十条规则) 先前成功写入的完整性是该项目的核心要求。数据将对业务至关重要。如果成功写入的内容保持写入状态,则可以牺牲完整的ACID语义。 这些文件本身很复杂。在我们的特定情况下,原型文档将需要每个文档实例存储150多个不同的数据。病理情况可能会恶化一个数量级,但肯定不会两个。 单类文档是移动的目标,在以后的某个时间点会进行更新。 当我们将其连接到关系数据库时,我们喜欢从Django获得的免费内容。我们希望保留免费赠品,而不必跳回两个Django版本来使用django-nonrel分支。完全转储ORM优于降级到1.3。 本质上,它是关系数据(用户,组等典型的Web应用程序之类的东西,以及我们需要能够实时对复杂查询进行切片和切分的文档元数据)和文档数据(例如我们不希望加入或查询的数百个字段-数据的唯一用例是显示输入该文档的单个文档)。 我想对我的首选方法进行健全性检查(如果您检查自己的发帖历史,我很清楚我不是DBA),并列举了我为其他人解决的所有选项涉及关系和非关系数据的大致相似的问题。 拟议解决方案: 1.每个文档类一张表 每个文档类都有自己的表,其中包含所有元数据和数据的列。 好处: 标准SQL数据模型正在发挥作用。 关系数据以最佳方式处理。如果需要,我们将在以后进行非规范化。 Django的内置管理界面非常适合内省这些表,并且ORM可以愉快地使用100%开箱即用的数据。 缺点: 维护噩梦。数十个(几百个)数千列的表。 应用程序级逻辑负责确定要写入哪个表。使表名成为查询的参数很糟糕。 基本上,所有业务逻辑更改都将要求架构更改。 病理情况可能需要在多个表中剥离单个表单的数据(请参阅:PostgreSQL表中的最大列数是多少?)。 我们可能需要去寻找一个真正的,诚实的上帝DBA,毫无疑问,他最终会讨厌我们和生活。 2. EAV建模 只有一个字段表。实体-属性-值建模已经众所周知。为了完整起见,我将其包括在内。我认为在2013年启动的任何新项目都不会故意采用EAV方法。 好处: 易于建模。 缺点: 更难查询。 DB层不再对构成一个应用程序级对象的内容进行直接表示。 我们将丢失数据库级别的约束检查。 一张桌子上的行数将增长100-1000倍。从性能角度来看,可能是将来的痛点。 索引可能有限。 就ORM而言,DB模式是荒谬的。Web应用程序中包含的电池已保留,但自定义数据模型将需要自定义查询。 3.使用PostgreSQL的hstore或json字段 这些字段类型中的任何一个都可以解决在关系DB上下文中存储无模式数据的问题。我不立即跳到该解决方案的唯一原因是它是一个相对较新的版本(在8.4版中引入,所以不是那个新版本),以前对此没有零接触,并且对此表示怀疑。出于完全相同的原因,我感到不对,因为我会很不舒服地将所有漂亮的,易于规范化的数据扔到Mongo中,即使Mongo可以处理文档之间的引用,我也会感到不舒服。 好处: 我们获得了Django ORM以及内置的身份验证和会话管理的好处。 一切都保留在我们先前成功用于其他项目的一个后端中。 缺点: 没有经验,个人。 它看起来不像是一个非常常用的功能。看起来他们很受推荐给使用NOSQL解决方案的人们的欢迎,但我看不出有很多证据表明它们已被选中。这使我认为我一定想念一些东西。 所有存储的值都是字符串。丢失数据库级别的约束检查。 …

1
如果MongoDB中的插入过多,会发生什么情况?如何确保所有数据都已存储?
此问题是从“服务器故障” 迁移而来的,因为可以在数据库管理员堆栈交换中回答。 迁移 6年前。 我使用MongoDB来存储定期测量的值。每隔约100毫秒将一堆值插入为文档。它工作正常,但我担心性能问题。(我使用安全插入,似乎在PyMongo中这是默认值。) 如果每秒插入的内容多于mongod可以保存到硬盘上的内容,会发生什么情况?会发出任何警告,还是只是默默地失败? 有什么方法可以监视写负载?我发现只有db.serverStatus().writeBacksQueued在调用它时始终将其设置为false的情况。我如何测试必须插入多少数据才能填满写队列? mongostat显示锁。这是我应该担心的事情吗? insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn repl time *117 *0 *0 *0 0 2|0 0 17.4g 35.3g 3.76g 0 .:6.5% 0 0|0 0|0 124b 6k 2 SLV …
24 mongodb 

4
是否可以仅安装mongo Shell?
我已经安装了Docker,并且正在MongoDBMac上为我的本地开发运行一个容器。问题是我无法从CLI轻松连接到所说的数据库。我已经安装了Robo 3T,但是我更愿意使用CLI客户端。 有没有一种已知的方法可以在OS X上仅安装mongo shell(command mongo)而不是完整的DB发行版?
21 mongodb  mac-os-x 

3
MongoDB:RAM需求
将整个索引存储在memory / ram中是否足够?mongodb甚至尝试分配尽可能多的ram来存储甚至用于快速读取的数据吗? 我想运行mongodb +其他应用程序,看起来mongodb是唯一一个不允许我定义RAM范围的应用程序,可以说“ max_memory_allocated_or_reserved = 8GB”。 如果没有办法,我应该向oom-killer解释说mongod是“不好的”过程,我认为这不是最佳实践。
20 mongodb 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.