質問

私は次の機能をサポートするデータベースを探しています:

1)データベースのレコードは、Python辞書またはPerlのハッシュのようです。たとえば、「購入」レコードは次のようになります。

<purchase 5436> = { product: "BMX Bike", price: 99.50, city: "Springfield" }

2)レコードは、可変長の配列に格納されています。データベースは、これらの配列の多くが含まれています。例えば、購入テーブルは次のようになります。

purchase array 1: [ <purchase 5436>, <purchase 54>, <purchase 112> ]
purchase array 2: [ <purchase 76>, <purchase 5984>, <purchase 1102>, <purchase 12> ]
...
purchase array 658: [ <purchase 10142>, <purchase 35>, <purchase 6458>, <purchase 23> ]

3)私は、このデータベースにクエリの2種類を行うことができるようにしたい。

3A)、様々な条件に一致するレコードの#をカウントします。たとえば、どのように多くの購入は50以上の値を用いて作製しましたか?私はこれをサポートしているデータベースの多くを知ってます。

3b)のレコードが特定の順序で表示された回数をカウントします。たとえば、存在しているどのように多くの配列の50以上の購入が行われた後、「スプリング」の購入が行われたのか?私はあなたがこれを行うために使用するデータベースの種類を知りません。

編集:スティーブ・ヘーグへの対応:私はスピードが重要であることを言及している必要があり、このデータベースはギガバイトのデータをサポートする必要があります。例えば、そこ10億購入配列にも、そして私は(順序が重要であることに注意してください)、「出身地」での購入で「スプリングフィールド」での購入に従っているどのようにそれらの多くカウントする場合があります。たぶん私は間違っているんだけど、私は、リレーショナルDBは、この目的のために遅すぎることだと思います。

役に立ちましたか?

解決

あなたが、リンクやジャンクションテーブルを使用してリレーショナルDBでこれを行うことができないことを確認?です。

あなたは注文の列に、オーダーごとにすべての製品のための行を持っている製品とテーブルオーダー製品の列を持つことになります。

私はこの記事のは、おそらく私よりも良い表現だと思いますできたています。

他のヒント

  

たとえば、あるかもしれません   10億購入アレイ、およびI   それらの多くは持っているかカウントしたいです   続く「スプリングフィールド」で購入   「ふるさと」の購入は、(ことに注意してください   順序)が重要です。たぶん私は間違っています、   私は、リレーショナルDBのだと思います   この目的のために遅すぎます。

あなたが記述何典型的なデータウェアハウスのクエリであり、私の知る限り、それらは通常、リレーショナルを使用して実装されていますDBを、並行トランザクション処理のためではなく、報告するために最適化されたものではあります。しかし、私はあなたが「通常の」RDBMSを使用する場合の速度の差が極端になるとは思いません。あなたは十分なお金を持っている場合はもちろん、あなたが特別なデータウェアハウスのDBMSのために行くことができます。

スピードに最も重要な影響)が大きいディスクベースのデータ・セットをキシにするために最適化技術1であることが起こっている - まさに全て「本物」DMBSsプランをthatsの、および2)データが正しい方法で編成。

  

図3b)回レコードの数をカウント   特定の順序で表示されます。ために   たとえば、どのように多くの配列ですが   50以上の購入が行われたし、   その後、「スプリング」で購入しました   製?私は、どのような種類のを知りません   あなたがこれを行うために使用するデータベースます。

クエリするのようなものをサポートするように設計されたスキーマとリレーショナルDBを使用します。あなたは、データを表現する方法のあなたの先入観を放棄する必要があるとしている。

あなただけのコレクションにグループ化されたキー - >値のペアを持っているようにあなたは本当にリレーショナルデータベースを必要としない、あなたが必要となるのレコードを反復処理するために2つのテーブル(レコードの1、コレクションの1)間の結合収集とあなたのケースでは、コスト価値はありません。

パフォーマンスの要件については、何が必要全体の構造がメモリに収まると、ディスクへのアクセスを必要としないことを確認することです。これを行うには、いくつかのサーバーを必要とするかもしれないし、他のサーバーへの参照を派遣マスターは(あなたの構造の大きさは現代のサーバーが処理できるメモリの合理的な量よりも大きいと仮定して、あなたの速度の要件が非常にあることあなたはディスクのページネーションを買う余裕はないことを大きなています。

あなたが言及したクエリの種類については、あなたの最良のオプションは、データの冗長性のビットを持つことです。挿入では、あなたはそれらの数を追跡します。データの冗長性のテント名前だけを読むことによって人々をフリークアウトするが、それは時々必要です。ちょうどあなたの実装に非常に注意すると、ここでユニットテストの良い量を投資します。

あなたはミリ秒のうちに、リアルタイムで行うことができなくなり、別の条件での購入が続く一つの条件で購入を見つけることについて1つのように思えること、ただし、クエリのいくつかの種類があるかもしれませんこの。どちらかあなたは挿入しながら/この数字のライブ追跡を維持削除/修正の方法を見つける、またはあなたが、方法はそれを避けないようにactualy配列のあなたの何百万人を反復処理する必要があります。あなたは、検索キーで(1)これらの統計情報を生成し、Oでそれらにアクセスできるようにする方法、最近のデータがあることが必要、と多分事前計算数時間ごとに検討する必要があります。

は、一言で言えば、あなたの問題は、あなたがそれを解決するために使用することを決定した技術を超えた方法です。

あなたが記述していることは、私がに関するいくつかの疑問を持っている場合でも、 MUMPS のと非常によく似ていますアレイ中の「レコード」の順序が可能であるクエリを定義すること。

あなたが見るように、この現在の商用バージョンもありますが、リンクを見てください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top