Чтение Cloud Bigtable из облачных функций с использованием Node.js занимает более 1500 мс - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь прочитать ключ Cloud Bigtable через Google Cloud Functions с помощью Node.JS, и я могу его прочитать, но время выполнения функции Cloud составляет более 1500 мс.

Я слышал, что 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);
        }
    })();

};

Я разместил консольные журналы в разных точках, а время до и после запроса имеет разрыв около 1500 мс.

1 Ответ

3 голосов
/ 07 июня 2019

Согласно документации :

Чтобы получить хорошую производительность от Cloud Bigtable, необходимо разработать схему, которая позволит равномерно распределять операции чтения и записи по каждой таблице..

Значение. Производительность Bigtable в значительной степени зависит от структуры схемы, в том числе от рабочей нагрузки, ячеек на строку, узлов на кластер, дисков и т. Д. Не только от среды, к которой осуществляется доступ (используя ваш код IДоступ к моим образцам таблиц Bigtable примерно за 750 мс из GCF и 4000 мс из Shell).

Кроме того, если вы хотите правильно протестировать производительность Bigtable, рекомендуется сделать это при правильных обстоятельствах:

  1. Использовать производственный экземпляр.Экземпляр разработки не даст вам точного представления о том, как рабочий экземпляр работает под нагрузкой.

  2. Используйте не менее 300 ГБ данных.Cloud Bigtable лучше всего работает с 1 ТБ или более данных.Однако 300 ГБ данных достаточно, чтобы обеспечить приемлемые результаты в тесте производительности на кластере из 3 узлов.В более крупных кластерах используйте не менее 100 ГБ данных на узел.

  3. Оставайтесь ниже рекомендуемого использования хранилища на узел.Дополнительные сведения см. В разделе «Использование хранилища для каждого узла».

  4. Перед тестированием проведите предварительное интенсивное тестирование в течение нескольких минут.Этот шаг дает Cloud Bigtable возможность балансировать данные между вашими узлами на основе шаблонов доступа, которые он наблюдает.

  5. Запустите тест по крайней мере на 10 минут.Этот шаг позволяет Cloud Bigtable еще больше оптимизировать ваши данные и помогает проверять чтение с диска, а также кэшированное чтение из памяти.

...