让我们尝试使用MongoDB进行复制

首先

本文将尝试使用MongoDB进行复制。

我想尝试复制的原因是我想要了解结果的一致性。

结果一致性是指更新最终会得到反映,或者说最终会保持一致。有点难以理解。

    • 結果整合性 – Wikipedia

 

    • Amazon S3 の結果整合性と読み取り一貫性 | Developers.IO

 

    CAPとBASEとEventually Consistent

我意识到了NoSQL的讨论,并且我开始研究使用哪种数据库能够确保结果的一致性。

由于MongoDB看起来很不错,所以我决定这次使用MongoDB。

暂时我介绍一篇有参考价值的文章。

    • 特集:MongoDBで理解する「ドキュメント・データベース」の世界(前編):開発者が知っておくべき、ドキュメント・データベースの基礎 (1/3) – @IT

 

    • MongoDB超入門 – Qiita

 

    • MongoDBでらくらくバッチ処理をやる(Javascriptファイルを実行する)方法 · DQNEO起業日記

Getting Started with MongoDB (Node.js Edition) — Getting Started With MongoDB 3.0.4
(特に、「A brief overview of the Node.js Driver」がオススメです。)
MongoDBのレプリケーションが簡単すぎる… – (゚∀゚)o彡 sasata299’s blog

在本文中,将介绍MongoDB的安装、数据库服务器的启动、客户端的启动、数据的存储和检索、主从配置以及复制功能等内容。

安装

为了安装MongoDB,请执行以下命令行。

$ sudo rudix install mongodb

启动 mongod 服务器

为了启动mongod,执行以下命令行。

$ mongod --dbpath db/mongo

使用–dbpath选项指定数据库路径。在未指定数据库路径的情况下启动数据库服务器会导致错误。

启动mongo客户端

要启动mongo,执行以下命令行。

$ mongo

尝试复制

准备主服务器和从服务器。

首先启动主服务器。

$ mongod --master --dbpath db/mongo/master

接下来,启动从服务器。

$ mongod --slave --port 27018 --source localhost --dbpath db/mongo/slave

由于设置了主服务器和从服务器,我决定尝试进行数据复制。

为了确认复制,客户端连接到主服务器并保存数据。然后,确认保存的数据也在从服务器上反映出来。

首先,我们会从客户端连接到主服务器和从服务器,以便确认初始状态。

当启动客户端时,可以使用–port参数指定连接的端口号。如果未指定,默认端口号为27017。

% mongo
MongoDB shell version: 2.6.0
connecting to: test
Server has startup warnings:
2015-08-25T01:19:09.501+0900 [initandlisten]
2015-08-25T01:19:09.501+0900 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
> show dbs
admin  (empty)
local  0.328GB
>

在这里,您需要指定端口号才能连接到 slave 服务器。

% mongo --port 27018
MongoDB shell version: 2.6.0
connecting to: 127.0.0.1:27018/test
Server has startup warnings:
2015-08-25T01:19:26.509+0900 [initandlisten]
2015-08-25T01:19:26.509+0900 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
> show dbs
admin  (empty)
local  0.078GB
>

接下来,我们将在主服务器上保存和搜索数据。

> use study
switched to db study
> db.study.insert({ name: 'taro', age: '123' })
WriteResult({ "nInserted" : 1 })
> db.study.find({ name: 'taro' })
{ "_id" : ObjectId("55db45e6ee1edad9b5e25d59"), "name" : "taro", "age" : "123" }
>

最后,我们确保保存的数据也能在从服务器上同步。

> use study
switched to db study
> db.study.find({ name: 'taro' })
{ "_id" : ObjectId("55db45e6ee1edad9b5e25d59"), "name" : "taro", "age" : "123" }
>

_id 的值也是相同的。由于在主服务器上保存的数据也已经被复制到从服务器,所以我们可以确认复制已经成功了。

尝试延迟复制

在启动从服务器时,您可以通过使用–slavedelay选项来延迟复制。

你可以使用以下命令行来延迟复制。

$ mongod --slave --port 27018 --source localhost --slavedelay 180 --dbpath db/mongo/slave

在这里,我们将指定将复制延迟180秒。

首先,要在主服务器上保存和检索数据。

> db.study.insert({ name: 'tokyo'})
WriteResult({ "nInserted" : 1 })
> db.study.find({ name: 'tokyo' })
{ "_id" : ObjectId("55db49beee1edad9b5e25d5b"), "name" : "tokyo" }
>

接下来,将在从属服务器上进行保存数据的搜索。

> db.study.find({ name: 'tokyo' })
>

保存数据之后立即进行搜索将不会返回结果,但是稍作等待后,搜索将会返回结果。

> db.study.find({ name: 'tokyo' })
{ "_id" : ObjectId("55db49beee1edad9b5e25d5b"), "name" : "tokyo" }

_id的值也是相同的,对吧。

我认为我们可以在体验中感受到整合性更新会很快被反映出来。

总结

我尝试使用MongoDB进行复制,并体验到了结果的一致性。

如果在slave服务器上忘记使用study命令,尽管我等了180秒,但似乎无法找到搜索结果。请小心。

bannerAds