创建全局数据存储客户端
Creating a global Datastore client
关于何时何地创建数据存储客户端对象的约定是什么?
datastore = new Datastore({});
在文档中,似乎在每个文件中都创建了一个新的 Datastore 实例。创建一个初始化数据存储区连接的单例并且 returns 对需要它的应用程序的每个部分使用相同的实例会有什么好处吗?
如果 new Datastore({})
实际上创建了一个新实例或 return 是一个单例,这取决于底层代码,您必须检查一下。
您可以做的是将数据存储实例的创建移动到一个单独的文件中,并且 require
该实例在您需要访问数据存储的每个文件中。由于您 require
的依赖项已被缓存,因此您将始终获得相同的实例。
伪代码:
datastore.js
const datastore = new Datastore({});
module.exports = datastore;
foo.js
const datastore = require('./datastore');
// do something with datastore
回复您的后续问题。
如果您查看 nodejs/Datastore 模块的源代码,您会看到相同的模式:
src/index.js
* @example <caption>Import the client library</caption>
* const Datastore = require('@google-cloud/datastore');
// ...
module.exports = Datastore;
无论您在哪里需要客户端库:
const Datastore = require('@google-cloud/datastore');
它总是return同一个实例。 Datastore 将为您处理缩放和连接(池化)。
结论:在每个文件中要求客户端库或将其包装在单独的文件中与在需要连接的文件中要求客户端库之间没有功能差异。
就个人而言,我更喜欢将连接包装在一个单独的文件中,并要求在我的数据访问文件中。这样做的好处是:
* 你抽象出实际的实现。如果您需要更改数据存储或连接到它的方式,它只会在一个地方。
* 如果您需要提供连接参数(如密码),您只需提供一次。它使您免于一遍又一遍地编写相同的代码。
关于何时何地创建数据存储客户端对象的约定是什么?
datastore = new Datastore({});
在文档中,似乎在每个文件中都创建了一个新的 Datastore 实例。创建一个初始化数据存储区连接的单例并且 returns 对需要它的应用程序的每个部分使用相同的实例会有什么好处吗?
如果 new Datastore({})
实际上创建了一个新实例或 return 是一个单例,这取决于底层代码,您必须检查一下。
您可以做的是将数据存储实例的创建移动到一个单独的文件中,并且 require
该实例在您需要访问数据存储的每个文件中。由于您 require
的依赖项已被缓存,因此您将始终获得相同的实例。
伪代码:
datastore.js
const datastore = new Datastore({});
module.exports = datastore;
foo.js
const datastore = require('./datastore');
// do something with datastore
回复您的后续问题。
如果您查看 nodejs/Datastore 模块的源代码,您会看到相同的模式:
src/index.js
* @example <caption>Import the client library</caption>
* const Datastore = require('@google-cloud/datastore');
// ...
module.exports = Datastore;
无论您在哪里需要客户端库:
const Datastore = require('@google-cloud/datastore');
它总是return同一个实例。 Datastore 将为您处理缩放和连接(池化)。
结论:在每个文件中要求客户端库或将其包装在单独的文件中与在需要连接的文件中要求客户端库之间没有功能差异。
就个人而言,我更喜欢将连接包装在一个单独的文件中,并要求在我的数据访问文件中。这样做的好处是: * 你抽象出实际的实现。如果您需要更改数据存储或连接到它的方式,它只会在一个地方。 * 如果您需要提供连接参数(如密码),您只需提供一次。它使您免于一遍又一遍地编写相同的代码。