Node.js halo dunia

Contoh kode ini adalah aplikasi "hello world" yang dijalankan di Node.js. Contoh ini menunjukkan cara menyelesaikan tugas berikut:

  • Menyiapkan autentikasi
  • Menghubungkan ke instance Bigtable.
  • Buat tabel baru.
  • Menulis data ke tabel.
  • Membaca kembali data.
  • Hapus tabel.

Menyiapkan autentikasi

Untuk menggunakan contoh Node.js di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

  1. Menginstal Google Cloud CLI.
  2. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

    gcloud auth application-default login

Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.

Menjalankan contoh

Contoh kode ini menggunakan paket Bigtable dari Library Klien Google Cloud untuk Node.js untuk berkomunikasi dengan Bigtable.

Untuk menjalankan program contoh ini, ikuti petunjuk untuk contoh di GitHub.

Menggunakan Library Klien Cloud dengan Bigtable

Aplikasi contoh terhubung ke Bigtable dan menunjukkan beberapa operasi sederhana.

Mewajibkan library klien

Contoh ini memerlukan modul @google-cloud/bigtable, yang menyediakan class Bigtable.

const {Bigtable} = require('@google-cloud/bigtable');

Menghubungkan ke Bigtable

Untuk terhubung ke Bigtable, buat objek Bigtable baru. Lalu, panggil metode instance() untuk mendapatkan objek Instance yang mewakili instance Bigtable Anda.

const bigtableClient = new Bigtable();
const instance = bigtableClient.instance(INSTANCE_ID);

Membuat tabel

Panggil metode table() instance untuk mendapatkan objek Table yang mewakili tabel untuk ucapan "hello world". Jika tabel tidak ada, panggil metode create() tabel untuk membuat tabel dengan satu kelompok kolom yang mempertahankan satu versi dari setiap nilai.

const table = instance.table(TABLE_ID);
const [tableExists] = await table.exists();
if (!tableExists) {
  console.log(`Creating table ${TABLE_ID}`);
  const options = {
    families: [
      {
        name: COLUMN_FAMILY_ID,
        rule: {
          versions: 1,
        },
      },
    ],
  };
  await table.create(options);
}

Menulis baris ke tabel

Gunakan array string ucapan untuk membuat beberapa baris baru untuk tabel: panggil metode map() array untuk membuat array objek baru yang mewakili baris, lalu panggil metode insert() tabel untuk menambahkan baris ke tabel.

console.log('Write some greetings to the table');
const greetings = ['Hello World!', 'Hello Bigtable!', 'Hello Node!'];
const rowsToInsert = greetings.map((greeting, index) => ({
  // Note: This example uses sequential numeric IDs for simplicity, but this
  // pattern can result in poor performance in a production application.
  // Rows are stored in sorted order by key, so sequential keys can result
  // in poor distribution of operations across nodes.
  //
  // For more information about how to design an effective schema for Cloud
  // Bigtable, see the documentation:
  // https://cloud.google.com/bigtable/docs/schema-design
  key: `greeting${index}`,
  data: {
    [COLUMN_FAMILY_ID]: {
      [COLUMN_QUALIFIER]: {
        // Setting the timestamp allows the client to perform retries. If
        // server-side time is used, retries may cause multiple cells to
        // be generated.
        timestamp: new Date(),
        value: greeting,
      },
    },
  },
}));
await table.insert(rowsToInsert);

Membuat filter

Sebelum membaca data yang Anda tulis, buat filter untuk membatasi data yang ditampilkan Bigtable. Filter ini akan memberi tahu Bigtable agar hanya menampilkan sel terbaru untuk setiap kolom, meskipun kolom tersebut berisi sel yang lebih lama.

const filter = [
  {
    column: {
      cellLimit: 1, // Only retrieve the most recent version of the cell.
    },
  },
];

Membaca baris berdasarkan row key-nya

Panggil metode row() tabel untuk mendapatkan referensi ke baris dengan kunci baris tertentu. Kemudian, panggil metode get() baris, yang meneruskan filter, untuk mendapatkan satu versi dari setiap nilai di baris tersebut.

console.log('Reading a single row by row key');
const [singleRow] = await table.row('greeting0').get({filter});
console.log(`\tRead: ${getRowGreeting(singleRow)}`);

Memindai semua baris tabel

Panggil metode getRows() tabel, yang meneruskan filter, untuk mendapatkan semua baris dalam tabel. Karena Anda meneruskan filter, BigQuery hanya menampilkan satu versi dari setiap nilai.

console.log('Reading the entire table');
// Note: For improved performance in production applications, call
// `Table#readStream` to get a stream of rows. See the API documentation:
// https://cloud.google.com/nodejs/docs/reference/bigtable/latest/Table#createReadStream
const [allRows] = await table.getRows({filter});
for (const row of allRows) {
  console.log(`\tRead: ${getRowGreeting(row)}`);
}

Menghapus tabel

Hapus tabel dengan metode delete() tabel.

console.log('Delete the table');
await table.delete();

Menggabungkan semuanya

Berikut adalah contoh kode lengkap tanpa komentar.



const {Bigtable} = require('@google-cloud/bigtable');

const TABLE_ID = 'Hello-Bigtable';
const COLUMN_FAMILY_ID = 'cf1';
const COLUMN_QUALIFIER = 'greeting';
const INSTANCE_ID = process.env.INSTANCE_ID;

if (!INSTANCE_ID) {
  throw new Error('Environment variables for INSTANCE_ID must be set!');
}

const getRowGreeting = row => {
  return row.data[COLUMN_FAMILY_ID][COLUMN_QUALIFIER][0].value;
};

(async () => {
  try {
    const bigtableClient = new Bigtable();
    const instance = bigtableClient.instance(INSTANCE_ID);

    const table = instance.table(TABLE_ID);
    const [tableExists] = await table.exists();
    if (!tableExists) {
      console.log(`Creating table ${TABLE_ID}`);
      const options = {
        families: [
          {
            name: COLUMN_FAMILY_ID,
            rule: {
              versions: 1,
            },
          },
        ],
      };
      await table.create(options);
    }

    console.log('Write some greetings to the table');
    const greetings = ['Hello World!', 'Hello Bigtable!', 'Hello Node!'];
    const rowsToInsert = greetings.map((greeting, index) => ({
      key: `greeting${index}`,
      data: {
        [COLUMN_FAMILY_ID]: {
          [COLUMN_QUALIFIER]: {
            timestamp: new Date(),
            value: greeting,
          },
        },
      },
    }));
    await table.insert(rowsToInsert);

    const filter = [
      {
        column: {
          cellLimit: 1, // Only retrieve the most recent version of the cell.
        },
      },
    ];

    console.log('Reading a single row by row key');
    const [singleRow] = await table.row('greeting0').get({filter});
    console.log(`\tRead: ${getRowGreeting(singleRow)}`);

    console.log('Reading the entire table');
    const [allRows] = await table.getRows({filter});
    for (const row of allRows) {
      console.log(`\tRead: ${getRowGreeting(row)}`);
    }

    console.log('Delete the table');
    await table.delete();
  } catch (error) {
    console.error('Something went wrong:', error);
  }
})();