0

在 Mongo 中,可以将数据库仅驻留在一台服务器中(但没有分片)?

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

  • 这样,如果我们开始发送太多的日志消息,只有拥有日志数据库的机器会变慢。

  • 理想情况下,它应该对应用程序是透明的,并且应该由 MongoS 进程管理 which-machine-has-which-database。

Nb:我们还不想对整个数据库进行分片,因为我们目前的性能还不错,我们只想将数据库与日志记录集合隔离开来。

4

2 回答 2

1

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

于 2012-05-15T07:28:12.917 回答
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

于 2012-05-15T12:01:14.273 回答