你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
APPLIES TO:
MongoDB
本文介绍如何在 Azure Cosmos DB 的用于 MongoDB 的 API 中使用 MongoDB 读取首选项设置全局分配读取操作。
Prerequisites
If you don't have an Azure subscription, create a free account before you begin.
或者,无需 Azure 订阅即可免费试用 Azure Cosmos DB,也无需缴纳费用或承诺金。 另外,对于本教程,也可以使用 Azure Cosmos DB 模拟器,该模拟器的连接字符串为:
mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true
Refer to this Quickstart article for instructions on using the Azure portal to set up an Azure Cosmos DB account with global distribution and then connect to it.
克隆示例应用程序
打开 git 终端窗口(例如 git bash)并使用 cd
切换到工作目录。
运行以下命令克隆示例存储库。 根据所需的平台,使用以下示例存储库之一:
git clone <sample repo url>
运行应用程序
根据所用的平台,安装所需的包并启动应用程序。 若要安装依赖项,请遵循示例应用程序存储库中包含的自述文件。 例如,在 NodeJS 示例应用程序中,使用以下命令安装所需的包并启动应用程序。
cd mean
npm install
node index.js
应用程序会尝试连接到 MongoDB 源,但连接会失败,因为连接字符串无效。 遵循自述文件中的步骤更新连接字符串 url
。 此外,将 readFromRegion
更新为 Azure Cosmos DB 帐户中的读取区域。 以下说明摘自 NodeJS 示例:
* Next, substitute the `url`, `readFromRegion` in App.Config with your Azure Cosmos DB account's values.
完成这些步骤后,示例应用程序将会运行并生成以下输出:
connected!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromNearestfunc query completed!
readFromRegionfunc query completed!
readDefaultfunc query completed!
readFromSecondaryfunc query completed!
使用读取首选项模式进行读取
MongoDB 协议提供以下读取首选项模式供客户端使用:
- primary
- primaryPreferred
- secondary
- secondaryPreferred
- nearest
请参阅详细的 MongoDB 读取首选项行为文档,详细了解其中每种读取首选项模式的行为。 在 Azure Cosmos DB 中,primary 映射到 WRITE 区域,secondary 映射到 READ 区域。
根据常见的方案,我们建议使用以下设置:
- 如果需要“高可用性和低延迟读取”,可以使用“NEAREST”读取首选项模式。 此设置会将读取操作定向到最靠近的可用区域。 请注意,如果最靠近的区域是 WRITE 区域,则这些操作会定向到该区域。
- 如果要求“读取操作高度可用且分散到不同的地区” (延迟不是约束条件),则使用“PRIMARY PREFERRED” 或“SECONDARY PREFERRED” 读取首选项模式。 此设置会将读取操作分别定向到可用的 WRITE 或 READ 区域。 如果该区域不可用,则根据读取首选项行为将请求定向到下一个可用区域。
示例应用程序中的以下代码片段演示如何在 NodeJS 中配置 NEAREST 读取首选项:
var query = {};
var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.NEAREST});
readcoll.find(query).toArray(function(err, data) {
assert.equal(null, err);
console.log("readFromNearestfunc query completed!");
});
同样,以下代码片段演示如何在 NodeJS 中配置 SECONDARY_PREFERRED 读取首选项:
var query = {};
var readcoll = client.db('regionDB').collection('regionTest', {readPreference: ReadPreference.SECONDARY_PREFERRED});
readcoll.find(query).toArray(function(err, data) {
assert.equal(null, err);
console.log("readFromSecondaryPreferredfunc query completed!");
});
还可以通过在连接字符串 URI 选项中将 readPreference
作为参数传递来设置读取首选项:
const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');
// Connection URL
const url = 'mongodb://localhost:27017?ssl=true&replicaSet=globaldb&readPreference=nearest';
// Database Name
const dbName = 'myproject';
// Use connect method to connect to the Server
MongoClient.connect(url, function(err, client) {
console.log("Connected correctly to server");
const db = client.db(dbName);
client.close();
});
Refer to the corresponding sample application repos for other platforms, such as .NET and Java.
使用标记读取
除了读取首选项模式以外,MongoDB 协议还允许使用标记来定向读取操作。 在 Azure Cosmos DB API for MongoDB 中,region
标记已默认包含为 isMaster
响应的一部分:
"tags": {
"region": "West US"
}
因此,MongoClient 可以结合区域名称使用 region
标记将读取操作定向到特定的区域。 对于 Azure Cosmos DB 帐户,可以 Azure 门户中左侧的“设置”->“全局副本数据”下面找到区域名称。 This setting is useful for achieving read isolation - cases in which client application want to direct read operations to a specific region only. 此设置非常适合用于在后台运行的,并且不属于生产关键型服务的非生产/分析型方案。
示例应用程序中的以下代码片段演示如何在 NodeJS 中使用标记配置读取首选项:
var query = {};
var readcoll = client.db('regionDB').collection('regionTest',{readPreference: new ReadPreference(ReadPreference.SECONDARY_PREFERRED, {"region": "West US"})});
readcoll.find(query).toArray(function(err, data) {
assert.equal(null, err);
console.log("readFromRegionfunc query completed!");
});
Refer to the corresponding sample application repos for other platforms, such as .NET and Java.
本文介绍了如何在 Azure Cosmos DB 的用于 MongoDB 的 API 中使用读取首选项全局分配读取操作。
清理资源
如果不打算继续使用此应用,请删除本文在 Azure 门户中创建的所有资源,步骤如下:
- From the left-hand menu in the Azure portal, click Resource groups and then click the name of the resource you created.
- On your resource group page, click Delete, type the name of the resource to delete in the text box, and then click Delete.