問題タブ [non-relational-database]
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.
python - Google App Engine の読み取り専用リレーショナル データベース?
Google App Engine に配置したい中規模 (~100 MB) の読み取り専用データベースがあります。それをデータストアに入れることもできますが、データストアは少し遅く、リレーショナル機能がなく、他にも多くの苛立たしい制限があります (ここでは説明しません)。もう 1 つのオプションは、すべてのデータをメモリにロードすることですが、Google によって課されたクォータにすぐに達してしまいます。最後のオプションは、django-nonrel + djangoappengine を使用することですが、残念ながらパッケージはまだ初期段階です。
理想的には、ブロブストアをデータ ソースとして使用する読み取り専用の sqlite データベースを作成したいと考えています。これは可能ですか?
relational-database - リレーショナルデータベースと非リレーショナルデータベースの違いは何ですか?
MySQL、PostgreSQL、MS SQL Serverなどのソリューションはリレーショナルデータベースシステムであり、NoSQL、MongoDBなどは非リレーショナルDBMSであることを私は知っています。
しかし、2つのタイプのシステムの違いは何ですか?
レイマン用語が望ましい。
ありがとう。
database - 時系列データ、リレーショナル データまたは非データ データの保存
SNMP を使用して (おそらく) 5 分間隔で、CPU 使用率、ディスク使用率、温度などのさまざまなメトリックに関するデータについてデバイスをポーリングするシステムを作成しています。最終的な目標は、時系列グラフの形でシステムのユーザーに視覚化を提供することです。
過去に RRDTool の使用を検討したことがありますが、キャプチャしたデータを無期限に保存することが私のプロジェクトにとって重要であり、キャプチャしたデータへのより高いレベルでより柔軟なアクセスが必要であるため、拒否しました。だから私の質問は本当にです:
リレーショナル データベース (MySQL や PostgreSQL など) または非リレーショナル データベースまたは NoSQL データベース (MongoDB や Redis など) は、グラフ作成のためにデータをクエリするときのパフォーマンスに関して優れています。
関連した
リレーショナル データベースを考えると、data_instances
テーブルを使用します。このテーブルには、すべてのデバイスで測定されるすべてのメトリックに対してキャプチャされたデータのすべてのインスタンスが格納され、次のフィールドがあります。
田畑:id
fk_to_device
fk_to_metric
metric_value
timestamp
特定のデバイスの特定のメトリックのグラフを描画する場合は、他のデバイスを除外してこの特異なテーブルをクエリし、このデバイスについて分析されている他のメトリックをクエリする必要があります。
このテーブルの行数は次のようになります。
ここで、 はデバイスd
の数、はすべてのデバイスについて記録されているメトリックの累積数、はデータがポーリングされる頻度、 はシステムがデータを収集している合計時間です。m_d
f
t
1 年間に 5 分ごとに 3 台のデバイスの 10 のメトリックを記録するユーザーの場合、500 万件弱のレコードになります。
インデックス
インデックスをオンにしてスキャンしないfk_to_device
と、fk_to_metric
この継続的に拡大するテーブルをスキャンするのに時間がかかりすぎます。そのため、前述のフィールドのインデックス作成と、timestamp
(ローカライズされた期間でグラフを作成するための) 要件が必要です。
非リレーショナル (NoSQL)
MongoDB にはコレクションの概念があり、テーブルとは異なり、これらはセットアップなしでプログラムで作成できます。これらを使用して、デバイスごとにデータのストレージを分割したり、デバイスごとに記録された各メトリックを分割したりすることもできます。
私は NoSQL の経験がなく、インデックス作成などのクエリ パフォーマンス向上機能を提供するかどうかもわかりませんが、前の段落では、データが NoSQL に格納される構造で従来のリレーショナル クエリ作業のほとんどを実行することを提案しています。
未定
適切なインデックス作成を備えたリレーショナル ソリューションは、年内にクロールに削減されますか? それとも、NoSQL アプローチのコレクション ベースの構造 (格納されたデータの私のメンタル モデルと一致します) は、顕著な利点を提供しますか?
google-app-engine - 非リレーショナル DBMS (AppEngine の BigTable) では、マス メッセージング タイプのシステムのエンティティをどのように設定すればよいですか?
たとえば、多くのユーザーがいるとします。ユーザーが何かメッセージを送信するたびに、他のユーザーのリストにメッセージを送ることができます (一括メール送信と同様)。ただし、ストレージ スペースを節約するために、メッセージを 1 回保存したいだけです。そのため、メッセージ受信者の 1 人がメールボックスを開くと、そこでそのメッセージを照会する必要があります。メッセージング システムのエンティティ (テーブル) の設定に関して、より効率的なのはどれですか? 注意: 非 RDBMS では、結合クエリは許可されていません。これはもっともらしい設定ですか、どうすればより効率的にすることができますか (1):
または、次の戦略 (2) を使用する必要があります。
どちらの戦略がより効率的だと思われますか? つまり、単純に DBMS を反復処理するよりも、配列リストを反復処理する方が遅いですか?
どんなコメントでも大歓迎です。
*注: メッセージは任意に長くなる可能性があるため、同じメッセージの複数のコピーを保存したくありません。
ありがとうございました。
sql - 時系列データに対して「5日以内」などのクエリを実行するにはどうすればよいですか?
時系列データに対して次のクエリのようなクエリを実行する簡単な方法が必要です。
「互いに7日以内に行われる最も典型的なイベントは何ですか?」
SQLとJavaプログラムを利用し、各行を調べてクエリを実行することでこれを行うことができます。クエリは7日前以降にすべてのイベントを検索しますが、これはあまりエレガントではなく、パフォーマンスはひどいものになります。SQLまたは別のクエリ言語を使用してこれをエレガントに行う別の方法はありますか?
簡略化されたテーブル構造は次のようになります。
私は一般的な解決策を探しているので、データが何であるかを具体的に説明したくありません。
mongodb - 非リレーショナルデータベース、どちらが正しい選択か
どの非リレーショナルデータベースを選択する必要がありますか(質問は主観的なものであり、システムの要求を考慮する必要があることを私は知っています)。
この記事cassandra-vs-mongodb-vs-couchdb-vs-redisを読みましたが、それでも決定できませんでした。
ここにいる経験豊富な人たちが、この決定を下す際に考慮すべき重要なポイントに光を当てることができれば、本当に良いことです。
google-app-engine - リレーショナル データ モデリングと非リレーショナル データ モデリング - 違いは何ですか
私はデータベースに不慣れで、RDBMS を使用したことがありません。しかし、リレーショナル データベースの基本的な考え方はわかりました。少なくとも私はすると思う ;-)
各ユーザーに次のプロパティを持つユーザー データベースがあるとします。
- ユーザー
- ID
- 名前
- ジップ
- 街
リレーショナルデータベースでは、たとえば、というテーブルでモデル化しますuser
- ユーザー
- ID
- 名前
- location_id
と呼ばれる2番目のテーブルがありますlocation
- 位置
- ID
- ジップ
- 街
Andは、テーブルlocation_id
内のエントリへの外部キー (参照)です。location
私がそれを正しく理解していれば、ここに利点があります。特定の都市の郵便番号が変更された場合、1 つのエントリを変更するだけで済みます。
それでは、非リレーショナル データベースに行きましょう。ここで、Google App Engine をいじり始めました。ここでは、仕様書の最初に書かれているように、実際にモデル化します。私は種類がありuser
ます:
利点は、2 つの「テーブル」を結合する必要がないことですが、欠点は、郵便番号が変更された場合、すべてのユーザー エントリを調べて郵便番号を更新するスクリプトを実行する必要があることです。
そのため、Google App Engine には別のオプションがあり、それは を使用することReferenceProperties
です。次の 2 種類がありますuser
。location
私が間違っていなければ、上記のリレーショナル データベースとまったく同じモデルを使用しています。私が今疑問に思っていることは、まず第一に、私が今行ったことは間違っていて、非リレーショナル データベースのすべての利点を破壊しているということです。zip と city の値を取得するには、2 番目のクエリを実行する必要があることを理解しています。しかし、別のケースでは、郵便番号を変更するには、既存のすべてのユーザーを調べなければなりません。
では、Google のデータストアのような非リレーショナル データベースにおけるこれら 2 つのモデリングの可能性は、どのような意味を持つのでしょうか。そして、両方の典型的なユースケースは何ですか。つまり、一方をいつ使用し、他方をいつ使用する必要があるかを意味します。
また追加の質問として、リレーショナル データベースでモデル化できるものとまったく同じものを非リレーショナル データベースでもモデル化できるのに、なぜリレーショナル データベースを使用する必要があるのでしょうか。
これらの質問のいくつかが素朴に聞こえる場合は申し訳ありませんが、データベース システムに不慣れな人がよりよく理解するのに役立つと確信しています。
google-app-engine - メッセージステータスのあるAppEngineメッセージングシステム-デザインパターン
GoogleAppEngineでホストされるスレッドメッセージングシステムを構築しています
AppEngineでのスケーラブルで複雑なアプリの構築でBrettSlatkinが説明した手法をモデルにしています
ユーザーのメッセージ状態を追跡するための最も効率的な方法を決定する必要がある問題。たとえば、特定のユーザーへのread
メッセージですarchived
。deleted
これが私がこれまでに思いついた解決策です。
Datastore +のStructuredPropertyを使用して、メッセージに状態を追加していますMessageIndex
このソリューションは単純ですが、MessageIndexの利点を打ち消します。さらに、MessageIndexはメッセージデータストアが書き込むのと同じエンティティグループにあるため、制限されます。
これを達成するための最も効率的な方法は何でしょうか?エンティティグループを追加する方が良い解決策でしょうか?
database-design - カスタムユーザータグとフィールドを備えた大規模なデータトラッカーに使用するデータモデルまたはデータベースシステム
アイテムと関連フィールドを追跡できるアプリケーションを作成したいと思います。たとえば、飲んだコーヒーの量を追跡したい場合は、コーヒーエントリを作成し、特定の場所から購入した8オンスのコーヒー1杯、カフェイン100mgなどの更新を投稿できます。 、そんな時に飲んだ。また、後でそれぞれを確認できるように、すべての更新を追跡したいと思います。ただし、追跡したい他のアイテムは、まったく異なるフィールドを持っている可能性があります(本にはタイトルがあり、楽しみの観点からランク付けされる可能性があります)。
次に、データにタグを付けて分類し、このデータに対してクエリ/レポートを実行できるようにしたいと思います。たとえば、特定の期間にどれだけ食べ物に費やしたかを確認したい場合があります。これにより、foodタグが付いたすべてのアイテムがクエリされ、すべてのアイテムが持つ時間フィールドに基づいてフィルタリングされ、すべてのアイテムのコストフィールドが合計されます。
1つのテーブルにすべてのアイテムが更新された非正規化リレーショナルデータベースでこれを実行できると考えていました。私が言ったようなデフォルトのフィールドと、追加のカスタムフィールド用のいくつかのスペースがそのテーブルに組み込まれていれば、かなり高速なクエリを実行できると思います。欠点の1つは、アイテムに新しいタグを追加すると、多くのレコードをコピーする必要があることです。タグ列の数が固定されていれば修正でき、新しいタグを追加することもできますが、これによりアイテムに含まれるタグの数が制限されます。
動的フィールド、高速クエリ、高速挿入/変更のバランスが優れた、このためのより優れたリレーショナルデータモデルはありますか?よりうまく機能する非リレーショナルデータベースプラットフォームがあるかどうか疑問に思いました。私はグラフデータベースを見て、それがより動的に見えるのでそれが良い考えであるかどうか疑問に思いました、しかし私はそれがこれ以上速くなるとは思いません。