すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データの書き込み

最終更新日:Dec 28, 2024

Tablestore では、異なる操作を呼び出すことで、単一のデータ行の書き込み、単一のデータ行の更新、複数のデータ行の同時書き込みを行うことができます。データテーブルにデータを書き込むには、完全なプライマリキー情報と、追加、削除、または変更する属性列を指定する必要があります。高並列アプリケーションにデータを書き込む場合は、行存在条件または列ベースの条件を設定して、指定された条件に基づいてデータを更新できます。

前提条件

単一のデータ行の書き込み

API 操作

/**
 * 特定の行にデータを挿入します。行が存在する場合、既存のデータは上書きされます。存在しない場合は、新しい行が追加されます。
 */
putRow(params, callback)

パラメーター

パラメーター

説明

tableName

データテーブルの名前。

primaryKey

行に関するプライマリキー情報。プライマリキー情報には、プライマリキー列の名前、タイプ、値が含まれます。

重要
  • 指定するプライマリキー列の数とタイプは、テーブル内のプライマリキー列の実際の数とタイプと同じである必要があります。

  • プライマリキー列が自動インクリメントプライマリキー列の場合、自動インクリメントプライマリキー列の値をプレースホルダーに設定するだけで済みます。詳細については、自動インクリメントプライマリキー列の設定を参照してください。

condition

操作を実行するために満たす必要がある条件。行存在条件または列値に基づく条件を指定できます。詳細については、条件付き更新の設定を参照してください。

説明
  • RowExistenceExpectation.IGNORE は、指定された行が存在するかどうかに関係なく、新しいデータが行に挿入されることを指定します。指定された行が存在する場合、既存のデータは上書きされます。

  • RowExistenceExpectation.EXPECT_EXIST は、指定された行が存在する場合にのみ新しいデータが挿入されることを指定します。既存のデータは上書きされます。

  • RowExistenceExpectation.EXPECT_NOT_EXIST は、指定された行が存在しない場合にのみデータが挿入されることを指定します。

attributeColumns

行の属性列。各属性列は、属性列名、属性列タイプ(オプション)、属性列値、タイムスタンプ(オプション)の順序でパラメーターによって指定されます。

  • 属性列名は属性列の名前であり、属性列タイプは属性列のデータ型です。詳細については、命名規則とデータ型を参照してください。

    ColumnType.INTEGER を使用して INTEGER 値を指定し、ColumnType.STRING を使用して UTF-8 エンコード STRING を指定し、ColumnType.BINARY を使用して BINARY 値を指定し、ColumnType.BOOLEAN を使用して BOOLEAN 値を指定し、ColumnType.DOUBLE を使用して DOUBLE 値を指定します。属性列タイプが BINARY の場合は、ColumnType.BINARY を使用する必要があります。それ以外の場合は、属性列タイプを指定しないでおくことができます。

  • タイムスタンプはデータバージョン番号です。詳細については、データバージョンと TTLを参照してください。

    システムによって自動的に生成されたデータバージョン番号を使用するか、カスタムデータバージョン番号を指定できます。データバージョン番号を指定しない場合は、システムによって自動的に生成されたデータバージョン番号が使用されます。

    • Tablestore によって生成されたデータバージョン番号は、1970 年 1 月 1 日 UTC 00:00:00 から経過したミリ秒数です。

    • データバージョン番号を指定する場合は、データバージョン番号がミリ秒単位の精度の 64 ビットタイムスタンプであり、有効なバージョン範囲内にあることを確認してください。

returnContent

戻り値のタイプ。

returnType: returnType パラメーターを TableStore.ReturnType.Primarykey に設定して、行のプライマリキーを返すことができます。このパラメーターは、自動インクリメントプライマリキー列機能で使用されます。

次のサンプルコードは、単一のデータ行を書き込む方法の例を示しています。

var TableStore = require('../index.js');
var Long = TableStore.Long;
var client = require('./client');

var currentTimeStamp = Date.now();
var params = {
  tableName: "sampleTable",
  condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
  primaryKey: [{ 'gid': Long.fromNumber(20013) }, { 'uid': Long.fromNumber(20013) }],
  attributeColumns: [
    { 'col1': 'Tablestore' },
    { 'col2': '2', 'timestamp': currentTimeStamp },
    { 'col3': 3.1 },
    { 'col4': -0.32 },
    { 'col5': Long.fromNumber(123456789) }
  ],
  returnContent: { returnType: TableStore.ReturnType.Primarykey }
};

client.putRow(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }

  console.log('success:', data);
});

詳細なサンプルコードを表示するには、PutRow@GitHub にアクセスしてください。

単一のデータ行の更新

API 操作

/**
 * 指定された行のデータを更新します。行が存在しない場合は、新しい行が追加されます。行が存在する場合は、リクエストコンテンツに基づいて、行の指定された列の値が追加、変更、または削除されます。
 */
updateRow(params, callback)

パラメーター

パラメーター

説明

tableName

データテーブルの名前。

primaryKey

行に関するプライマリキー情報。

重要

指定するプライマリキー列の数とタイプは、テーブル内のプライマリキー列の実際の数とタイプと同じである必要があります。

condition

操作を実行するために満たす必要がある条件。行存在条件または列値に基づく条件を指定できます。詳細については、条件付き更新の設定を参照してください。

updateOfAttributeColumns

更新する属性列。

    次のサンプルコードは、単一のデータ行を更新する方法の例を示しています。

    var TableStore = require('../index.js');
    var Long = TableStore.Long;
    var client = require('./client');
    
    var params = {
        tableName: "sampleTable",
        condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
        primaryKey: [{ 'gid': Long.fromNumber(9) }, { 'uid': Long.fromNumber(90) }],
        updateOfAttributeColumns: [
            { 'PUT': [{ 'col4': Long.fromNumber(4) }, { 'col5': '5' }, { 'col6': Long.fromNumber(6) }] },
            { 'DELETE': [{ 'col1': Long.fromNumber(1496826473186) }] },
            { 'DELETE_ALL': ['col2'] }
        ]
    };
    
    client.updateRow(params,
        function (err, data) {
            if (err) {
                console.log('error:', err);
                return;
            }
    
            console.log('success:', data);
        });                

    詳細なサンプルコードを表示するには、UpdateRow@GitHub にアクセスしてください。

    複数のデータ行の同時書き込み

    使用上の注意

    • BatchWriteRow 操作を呼び出して複数のデータ行を同時に書き込むと、一部の行の書き込みに失敗することがあります。この場合、Tablestore は例外を返しません。 Tablestore は、失敗した行のインデックスとエラーメッセージが含まれる BatchWriteRowResponse を返します。そのため、BatchWriteRow 操作を呼び出すときは、戻り値を確認してすべての行が書き込まれたかどうかを確認してください。戻り値を確認しないと、書き込みに失敗した行が無視される可能性があります。

    • BatchWriteRow 操作を呼び出して、最大 200 行の最大 4 MB のデータを同時に書き込むことができます。

    API 操作

    /**
     // 複数のテーブルの複数のデータ行を追加、削除、または更新します。
     */
    batchWriteRow(params, callback)

    パラメーター

    BatchWriteRow 操作は、複数の PutRow、UpdateRow、および DeleteRow 操作で構成されます。

    • テーブルの階層が作成されます。複数のテーブルを同時に処理できます。

      tables パラメーターを設定して、書き込み、更新、または削除操作を実行するテーブルと行に関する情報を指定できます。

    • type パラメーターが追加され、異なる操作タイプが区別されます。

      操作タイプを PUT、UPDATE、または DELETE に設定できます。

      • 操作タイプを PUT または UPDATE に設定すると、primaryKey と attributeColumns が有効になります。

      • 操作タイプを DELETE に設定すると、primaryKey が有効になります。

    次のサンプルコードは、複数のデータ行を同時に書き込む方法の例を示しています。

    var client = require('./client');
    var TableStore = require('../index.js');
    var Long = TableStore.Long;
    
    var params = {
    
        tables: [
            {
                tableName: 'sampleTable',
                rows: [
                    {
                        type: 'UPDATE',
                        condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
                        primaryKey: [{ 'gid': Long.fromNumber(20010) }, { 'uid': Long.fromNumber(20010) }],
                        attributeColumns: [{ 'PUT': [{ 'col1': 'test3' }, { 'col2': 'test4' }] }],
                        returnContent: { returnType: 1 }
                    },
                    {
                        type: 'PUT',
                        condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
                        primaryKey: [{ 'gid': Long.fromNumber(20020) }, { 'uid': Long.fromNumber(20020) }],
                        attributeColumns: [{ 'col1': 'test1' }, { 'col2': 'test2' }],
                        returnContent: { returnType: TableStore.ReturnType.Primarykey }
                    },
                    {
                        type: 'DELETE',
                        condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null),
                        primaryKey: [{ 'gid': Long.fromNumber(20018) }, { 'uid': Long.fromNumber(20018) }],
                    }
                ]
            }
        ],
    };
    
    client.batchWriteRow(params, function (err, data) {
    
        if (err) {
            console.log('error:', err);
            return;
        }
    
        console.log('success:', data);
    });                   

    詳細なサンプルコードを表示するには、BatchWriteRow@GitHub にアクセスしてください。

    FAQ

    参照

    • 指定された条件に基づいて高並列アプリケーションのデータを更新するには、条件付き更新機能を使用できます。詳細については、条件付き更新の設定を参照してください。

    • さまざまなトピックのページビュー(PV)数など、オンラインアプリケーションに関するリアルタイム統計を収集するには、アトミックカウンター機能を使用できます。詳細については、アトミックカウンター機能の使用を参照してください。

    • 1 つ以上のデータ行を書き込むためのアトミック操作を実行するには、ローカル トランザクション機能を使用できます。詳細については、ローカル トランザクションの設定を参照してください。

    • テーブルにデータを書き込んだ後、ビジネス要件に基づいてテーブル内のデータを読み取ったり削除したりできます。詳細については、データの読み取りデータの削除を参照してください。