仅在一个分片中创建数据库

时间:2012-05-15 06:31:27

标签: mongodb

在Mongo中,数据库只能驻留在一台服务器上(但没有分片)?

  • 我想使用Mongo存储我们的应用程序日志,但我想将它们放在与其他数据不同的机器上。

    < / LI>
  • 这样,如果我们开始发送太多日志消息,那么只有带有日志记录数据库的计算机才会变慢。

  • 理想情况下,它应该对应用程序透明,哪个机器有哪个数据库应该由MongoS进程管理。

Nb:我们不想对整个数据库进行分片,因为我们现在已经完成了性能,我们只想将数据库与日志记录集合隔离开来。 < / p>

2 个答案:

答案 0 :(得分:1)

是的,您可以在应用程序服务器上运行mongos并在另一台计算机上运行mongod进程来存储日志。 但是如果你想使用mongos你必须使用分片 - 但你可以使用一个分片。 您将需要以--shardsvr运行mongod进程并将此单个分片添加到mongos进程。您还需要运行至少1个配置服务器。 使用此设置存在数据冗余问题 - 因此您可能希望运行多个mongod进程 - 在单个分片中使用副本集并在不同的计算机上运行这些mongod进程。如果你打算这样做,你也可以运行3个配置服务器(它可以选择1或3进行分片设置) - 副本集的2个1节点和1个节点。 此外,对于日志记录,人们经常使用上限集合

答案 1 :(得分:1)

是的,您可以使用2个mongoD和2个不同的服务器,一个使用您的实际数据库,另一个使用日志数据库。

诀窍是对每个数据库进行分片,但是

然后使用movePrimary命令,您可以选择实际存储这些未经编组的集合的位置。

(见:http://www.mongodb.org/display/DOCS/movePrimary+Command

在你的情况下,你会这样做:

db.adminCommand({movePrimary:applicationdb, to:application_shard})
db.adminCommand({movePrimary:loggingdb, to:logging_shard})

但请注意,当您决定对applicationdb进行分片时,mongo会自动开始将您的数据传播到loggingdb_shard