我正在尝试使用Node.JS通过Google Cloud Functions读取Cloud Bigtable密钥,并且能够读取它,但是Cloud Function的执行时间超过1500ms。
我听说Cloud Bigtable在数据检索方面非常快,但是在这种情况下却没有发生。
有人可以帮我解决我在这里做错了吗
我试图全局加载Bigtable库和对象:
/**
* Responds to any HTTP request.
*
* @param {!express:Request} req HTTP request context.
* @param {!express:Response} res HTTP response context.
*/
// Imports the Google Cloud client library
const Bigtable = require('@google-cloud/bigtable');
const TABLE_ID = '';
const COLUMN_FAMILY_ID = '';
const COLUMN_QUALIFIER = '';
const INSTANCE_ID = '';
// Creates a Bigtable client
const bigtable = new Bigtable();
// Connect to an existing instance:my-bigtable-instance
const instance = bigtable.instance(INSTANCE_ID);
// Connect to an existing table:my-table
const table = instance.table(TABLE_ID);
const filter = [{
family: COLUMN_FAMILY_ID,
}, {
column: COLUMN_QUALIFIER
}];
exports.helloWorld = (req, res) => {
console.log("started");
(async () => {
try {
var query_params = req.query;
var rowkey = query_params.key;
console.log("before query");
const [singleRow] = await table.row(rowkey).get({filter});
console.log("after query");
res.status(200).send();
} catch (err) {
// Handle error performing the read operation
console.error(`Error reading rows :`, err);
}
})();
};
我已将控制台日志放在各个位置,并且查询之前和查询之后的日志时间大约有1500ms。
答案 0 :(得分:3)
要想从Cloud Bigtable获得良好的性能,必须设计一个架构,使其能够在每个表之间平均分配读写。
意思是,Bigtable的性能在很大程度上取决于架构设计,例如工作负载,每行的单元数,每个集群的节点,磁盘等。不仅访问它的环境(使用您的代码,我还访问了我的示例Bigtable表) GCF 750毫秒,Shell 4000毫秒)。
此外,如果您希望正确测试Bigtable性能,建议在正确的情况下进行操作:
使用生产实例。开发实例不会给你 准确了解生产实例在负载下的性能。
至少使用300 GB的数据。 Cloud Bigtable的1 TB效能最佳 或更多数据。但是,300 GB的数据足以提供 在3节点群集上进行性能测试的合理结果。上 较大的群集,每个节点至少使用100 GB的数据。
保持低于每个节点的建议存储利用率。对于 详细信息,请参阅每个节点的存储利用率。
在测试之前,请进行大量的预测试几分钟。这一步 让Cloud Bigtable有机会在您的节点之间平衡数据 根据它观察到的访问模式。
运行测试至少10分钟。此步骤使Cloud Bigtable 进一步优化您的数据,这有助于确保您进行测试 从磁盘读取以及从内存缓存的读取。