私はデータベースに詳しくないので、SQLAlchemy を使用してテーブルを分割する方法がわかりません。
どうぞよろしくお願いいたします。
パーティショニングには、垂直パーティショニングと水平パーティショニングの2種類があります。
ドキュメントから:
垂直分割
垂直分割では、複数のデータベースにさまざまな種類のオブジェクトまたはさまざまなテーブルが配置されます。
engine1 = create_engine('postgres://db1') engine2 = create_engine('postgres://db2') Session = sessionmaker(twophase=True) # bind User operations to engine 1, Account operations to engine 2 Session.configure(binds={User:engine1, Account:engine2}) session = Session()
水平分割
水平分割は、単一のテーブル(またはテーブルのセット)の行を複数のデータベースに分割します。
の「シャーディング」の例を参照してください
attribute_shard.py
それらについてもっと情報が必要かどうか尋ねてください。できれば、やりたいことについてもっと情報を提供してください。
自動パーティショニングはデータベース エンジン固有の概念であり、SQLAlchemy はパーティショニングを管理するための一般的なツールを提供していません。主な理由は、学習する別の API でありながら、本当に役立つものを提供しないためです。データベース レベルのパーティショニングを行う場合は、カスタムの Oracle DDL ステートメントを使用して CREATE TABLE ステートメントを実行します (パーティション テーブルを作成し、そこにデータを移行する方法については、Oracle のドキュメントを参照してください)。通常のテーブルを使用する場合と同じように、SQLAlchemy でパーティション分割されたテーブルを使用できます。必要なのは、SQLAlchemy がクエリ対象を認識できるようにするためのテーブル宣言だけです。データベースから定義を反映するか、SQLAlchemy コードでテーブル宣言を複製することができます。
通常、非常に大きなデータセットは時間ベースであり、古いデータは読み取り専用またはほとんど読み取りになり、クエリは通常、時間間隔のデータのみを参照します。それがあなたのデータを説明している場合、おそらく日付フィールドを使用してデータを分割する必要があります。
また、アプリケーションを使用して異なるデータベース インスタンス間でデータを分割する、アプリケーション レベルのパーティショニング (シャーディング) もあります。これは、法外な価格モデルのため、オラクルの世界ではそれほど人気がありません. シャーディングを使用したい場合は、SQLAlchemy がどのようにサポートできるかについて、SQLAlchemy のドキュメントと例を参照してください。ただし、アプリケーション レベルのシャーディングは、アプリケーション コードのビルド方法に影響することに注意してください。
データベースに詳しくない人にとってはかなり高度なテーマですが、Essential SQLAlchemy を試してみてください (重要な部分はGoogle ブック検索で読むことができます-- p. 122 から 124; p. 125-126 の例はオンラインで自由に読めないため、例を読みたい場合は、その本を購入するか、O'Reilly のSafariなどの商用サービス (おそらく無料試用版) で読む必要があります)。
おそらく、垂直分割と水平分割のどちらについて話しているのか、なぜ分割が必要なのか、その目的のために検討している基盤となるデータベース エンジンについて言及すると、より良い答えが得られるでしょう。