2017-08-11 3 views
0

Spannerで顧客データを確実に分離するためのオプションを検討しています。最も明白な解決策はデータベースごとの顧客ですが、100データベース/インスタンスの制限は実用的ではありません。これまでの経験から、各テーブルのプライマリキーにcustomer-idフィールドを追加する計画は非常に疑いがあります。これは、SQLクエリでこれを実行するのは簡単すぎるため、危険なデータクロストークにつながります。Spannerで顧客データを安全に分離

すべての2kテーブル/インスタンスを使用し、顧客ごとに必要な〜32のテーブルを用意し、の接頭辞の接頭辞のような奇妙なソリューションを検討しています。たとえば、[cust-id]-Table1,などです。少なくとも、鉄被覆されている必要がある顧客分離ロジックは、クエリ内で壊れにくい1か所に配置できます。しかし、それほど奇妙なアプローチを知っている人はいますか?たとえば、「100」は技術的な制限の中で疑わしい非円形の数字です。何とか調整可能ですか?

答えて

0

残念ながら、100データベース/インスタンスは調整可能な値ではありません。

「私は完全に理解していないようですが、各テーブルの主キーにcustomer-idフィールドを追加する計画は非常に疑いがあります。危険なデータクロストーク "クエリのパフォーマンス、データの正確性、コードの正確性、スキーマが心配ですか?

このスキーマを使用すると、顧客あたり〜32個のテーブルで〜6000人の顧客のみを格納できます。他のスキーマの選択でベンチマークを提案していますが、Spannerが公開しています。

これらの顧客テーブルとクエリパターンのハイレベルスキーマを提供できますか?また

、より良いあなたのユースケースに合わせてより多くのアイデアのために読むことをお勧め:

+0

これはではかなり一般的な問題ですマルチテナントデータベース。顧客データの混在を避けることは最大限重要ですが、 'create table User(custId int64、email string ...)の主キー(custId、email)'(ここで 'custId'は顧客テナント、' email 'はそのエンドユーザーです)。 'select User。* from user from email [...]'のようなクエリは、誤って顧客データを混ぜるでしょう。これが決して任意のクエリで決して悪化しないことを保証することは非常に困難です。それゆえ、より強い分離を望む私たちの願い。 –

+0

申し訳ありませんが少し高密度でした。 SOのコメントはかなり制限されています。明らかにするために、私は固体のエンジニアリングチームの直面でこの種の構造が爆破するのを見てきました。したがって理論的な懸念事項ではありません。 私は他の提案をしています(私はすべてのSpannerドキュメントを読んできましたが、これまでのところこの質問には何も触れていませんでした)。 6kの顧客に関しては、オーバーフローを処理するために複数のインスタンス/クラスタを作成する必要があります。私は愛していないが、私は他の多くを思いついていない。 –

関連する問題