2

私はデータベースに詳しくないので、SQLAlchemy を使用してテーブルを分割する方法がわかりません。

どうぞよろしくお願いいたします。

4

3 に答える 3

4

パーティショニングには、垂直パーティショニングと水平パーティショニングの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

それらについてもっと情報が必要かどうか尋ねてください。できれば、やりたいことについてもっと情報を提供してください。

于 2009-07-06T13:32:30.870 に答える
3

自動パーティショニングはデータベース エンジン固有の概念であり、SQLAlchemy はパーティショニングを管理するための一般的なツールを提供していません。主な理由は、学習する別の API でありながら、本当に役立つものを提供しないためです。データベース レベルのパーティショニングを行う場合は、カスタムの Oracle DDL ステートメントを使用して CREATE TABLE ステートメントを実行します (パーティション テーブルを作成し、そこにデータを移行する方法については、Oracle のドキュメントを参照してください)。通常のテーブルを使用する場合と同じように、SQLAlchemy でパーティション分割されたテーブルを使用できます。必要なのは、SQLAlchemy がクエリ対象を認識できるようにするためのテーブル宣言だけです。データベースから定義を反映するか、SQLAlchemy コードでテーブル宣言を複製することができます。

通常、非常に大きなデータセットは時間ベースであり、古いデータは読み取り専用またはほとんど読み取りになり、クエリは通常、時間間隔のデータのみを参照します。それがあなたのデータを説明している場合、おそらく日付フィールドを使用してデータを分割する必要があります。

また、アプリケーションを使用して異なるデータベース インスタンス間でデータを分割する、アプリケーション レベルのパーティショニング (シャーディング) もあります。これは、法外な価格モデルのため、オラクルの世界ではそれほど人気が​​ありません. シャーディングを使用したい場合は、SQLAlchemy がどのようにサポートできるかについて、SQLAlchemy のドキュメントと例を参照してください。ただし、アプリケーション レベルのシャーディングは、アプリケーション コードのビルド方法に影響することに注意してください。

于 2009-07-06T13:48:20.543 に答える
3

データベースに詳しくない人にとってはかなり高度なテーマですが、Essential SQLAlchemy を試してみてください (重要な部分はGoogle ブック検索で読むことができます-- p. 122 から 124; p. 125-126 の例はオンラインで自由に読めないため、例を読みたい場合は、その本を購入するか、O'Reilly のSafariなどの商用サービス (おそらく無料試用版) で読む必要があります)。

おそらく、垂直分割と水平分割のどちらについて話しているのか、なぜ分割が必要なのか、その目的のために検討している基盤となるデータベース エンジンについて言及すると、より良い答えが得られるでしょう。

于 2009-07-06T03:41:36.890 に答える