問題タブ [columnstore]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - MariaDB 列ストア LAST_INSERT_ID() の代替
環境:
OS:CentOS7.2
DB サーバー: 10.1.23-MariaDB 列ストア 1.0.9-1
2 つのテスト データベース、1 つの InnoDB と 1 つの列ストア:
問題:
InnoDB テーブルにいくつかの挿入を実行します。
最後に挿入されたIDを取得したいときは、これを実行します:
InnoDB テーブルへの挿入を実行し、追加の ctlid 値の作成をトリガーする他の同時セッションがあるかどうかに関係なく、現在のセッション中に挿入された最後の ctlid 値が結果に正しく表示されます。ここまでは順調ですね..
ここで、Columnstore テーブルにいくつかの挿入を実行します。
上記と同じ動作を実現したいのですが、残念ながらこれは列ストアによって無視されます。
次の代替手段を使用しました。
ただし、どちらにも大きな制限があります。他の同時セッションが挿入を実行する場合、上記の 2 つのクエリの結果は、それらの挿入によって生成される自動インクリメント値の影響を受けます。基本的に、予想される最後に挿入された ID を取得できない可能性がありますが、他のセッションが自動インクリメント値を並行して作成した場合に備えて、より大きな ID を取得します。
私もしようとしました:
テーブルをロックする
挿入を実行します
を使用して最後の挿入 ID を取得します
select callastinsertid('test_cs')
その後、テーブルのロックを解除します
ただし、列ストアではテーブルのロックがサポートされていないようです。
Columnstore で一貫性のある最後に挿入された ID (セッションごと) を達成する可能性はありますか?
私たちの計画は、機能の一部を MariaDB/MySQL から Columnstore に切り替えることですが、上記の制限がかなりの障害になっています。