問題タブ [document-oriented-db]
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.
schema - MongoDB Update / Upsert の質問 - スキーマ関連
MongoDB でデータを表現する際に問題があります。私は、日付と単語の組み合わせが一意であるこのスキーマ設計を使用していました。
約 200 の固定数の日付があります。日付ごとに潜在的に 100,000 語以上。10 万人以上のユーザー。
次のようなアルゴリズムでレコードを挿入しました。
ただし、このスキーマではコレクションが非常に大きくなり、パフォーマンスが大幅に低下しました。4 つのコレクションのそれぞれに異なる情報を挿入しているため、データベースに対する操作の数が非常に多くなります。
単語とユーザーの配列がセットになっているような形式でデータを表すことを検討しています。
この背後にあるアイデアは、データベース操作の数を削減することでした。そのため、アルゴリズムのループごとに、コレクションごとに更新を 1 回だけ実行します。ただし、アルゴリズムの各ループで、新しい単語、ユーザー、またはその両方を挿入する必要がある場合があるため、これに対して更新/アップサートを実行する方法がわかりません。
誰かがこのドキュメントを更新する方法を推奨できますか、または誰かが代替スキーマを提案できますか?
ありがとう
database-design - ravendbやmongodbなどのドキュメント指向データベースの既存のデータモデルを再モデル化する方法
次のシナリオ(リレーショナルデータベースを使用)を想定します。
実際のシナリオでは、注文数が多くなります(数は増え続けます)。ドキュメントベースのデータベースをサポートするためにこれを変換する最適な方法は何でしょうか。通貨コードと名前を変更するオプションがあり、それが発生したときに、通貨が注文の子として追加された場合、すべての注文で自動的に更新されますか?
mysql - プライマリデータベースとしてのドキュメント指向のデータベースとセカンダリデータベースとしてのRDBMSデータベース?
MySQLデータベースが正規化されているため、パフォーマンスの問題が発生しています。
データベースを使用する私のアプリケーションのほとんどは、いくつかの重いネストされたクエリを実行する必要があります。私の場合、これには多くの時間がかかります。インデックスを使用すると、クエリの実行に最大2秒かかる場合があります。インデックスなしで約45秒。
数か月前に私が思いついた解決策は、より高速でより線形なドキュメントベースのデータベース(私の場合はSolr)をプライマリデータベースとして使用することでした。MySQLデータベースで何かが変更されるとすぐに、Solrに通知されました。
これは本当にうまくいきました。Solrデータベースを使用するすべてのクエリは、約3ミリ秒しかかかりませんでした。
数字は良さそうですが、問題があります。
- 巨大なデータベース
MySQLデータベースは約200MBで、Solrデータベースには約1.4Gbのデータが含まれています。テーブル/列を変更する必要があるたびに、データベースのインデックスを再作成する必要があります。この例では、12時間以上かかりました。
- 濡れることなくSolrオブジェクトとActiveRecord(MySQL)オブジェクトの両方をレンダリングすることは困難です。
ビューは特定のオブジェクトに依存しています。オブジェクト自体がActiveRecordオブジェクトであるかSolrオブジェクトであるかは、そのオブジェクトの属性のセットを呼び出すことができる限り、関係ありません。
このような。
私の場合の問題は、Solrから返されるデータがこのようにフラットであるということです。
これにより、ビューに渡すことができるアクティブなレコードオブジェクトを作成する必要があります。
私の質問
問題を解決するためのより良い方法はありますか?複雑なクエリを高速に処理できる、ある種の超高速プライマリ読み取り専用データベースがあれば便利です。
c# - CRUD シナリオの NoSql 更新メカニズム
私は Orm フレームワークの経験があり、NoSql データベース ソリューションの構造を理解し始めています。オブジェクト モデルに基づくいくつかのサンプルを使用します。
以下のドキュメント モデルがあり、いくつかのシナリオ処理を考えたいと思います。
- タグの少ない投稿を保存
- タグリストと投稿数を表示
- タグを更新する
そして、私のシナリオについていくつかの疑問が頭に浮かびます。
Post クラスは、タグ付きで保存されるドキュメントです。RDBMSでは、タグとポストには多対多の関係がありますが、NoSqlには関係がないため、投稿オブジェクトはメンバー全体で保存されることを理解しています。したがって、投稿カウントシナリオでタグリストを表示すると、投稿アイテム全体で重いクエリが発生しますすべてのクエリでいくらかの努力を払っているので、このシナリオで NoSql パワーのすべての利点を失うことはありませんか?
タグ名を更新しても複雑なジョブは発生しませんか? 投稿アイテム全体を照会し、そのタグ名があることを確認して更新する必要があります。ちなみに、マルチドキュメントトランザクションと長いプロセスが必要なので、NoSqlでマルチドキュメントトランザクションがサポートされていないため、失敗するとデータベースに矛盾が生じます。どうすればこれを処理できますか?
RDBMS(Sql) システムに対して NoSql の短所を示すつもりはありません。私は、このシナリオについて私の考えが正しいかどうかを理解しようとしているだけです.私が見逃したものがあるか、物事が悪く見えるかは、私が思っていたほど悪くはありません. スケーラビリティが必要なので、NoSql ソリューションに興味があります。
database - RDFストレージをドキュメント指向データベースとしても使用することは可能ですか?
大量の異種JSONドキュメント(つまり、名前付きのキーと値のマッピング)と、これらのドキュメントがアタッチされているクラスの階層(つまり、名前付きのセット)があるとします。次のことを可能にするデータ構造を設定する必要があります。
- JSONドキュメントに対するCRUD操作。
- IDによるJSONドキュメントの取得は非常に迅速です。
- 特定のクラスに添付されているすべてのJSONドキュメントを非常に迅速に取得します。
- クラス階層の編集:クラスの追加/削除、再配置。
私は当初、JSONドキュメントをドキュメント指向データベース(CouchDBやMongoDBなど)に格納し、クラス階層をRDFストレージ(4storeなど)に格納するというアイデアを思いつきました。1
、2
そして4
自然に理解さ3
れ、ストレージ内のすべてのクラスの添付ドキュメントIDのリストを維持することによって解決されます。
しかし、RDFストレージは、IDによってJSONドキュメントを取得するというドキュメント指向の部分を実際に実行できると思いました。一見これは本当のように見えますが、私はまだ心配してい2
ます3
。ドキュメント指向のdbのサーブドキュメントの速度でドキュメント(ノード)を取得できるRDFストレージはありますか?3
クエリのようにどのくらいの速さで機能しますか?RDFストレージが遅い、具体化の問題などについて少し聞いたことがあります。
たとえば、CouchDBのように、IDでオブジェクトをカジュアルに取得するのにも快適なRDFストレージはありますか?JSONのようなオブジェクトの保存、取得、編集にドキュメント指向ストレージとRDFストレージを使用することの違いは何ですか?
python - PyMongo と toArray() メソッド
小さなデータベース (64MB) でいくつかのベンチマークを作成する必要があり、PyMongo を使用して Mongo コレクション全体を Python オブジェクトにフェッチする最もスマートな方法を見つける必要がありますか? JavaScript には toArray() メソッドがありますが、Python では同様のものを見つけることができません。前もって感謝します!
views - null 値で Couch DB ビューを作成することに問題はありますか?
私は最近、空き時間に Couch DB でかなりの量の作業を行っており、それを使用することを本当に楽しんでいます。リレーショナル データベースを使用するよりもはるかに柔軟だと思いますが、欠点がないわけではありません。
大きな欠点の 1 つは、動的クエリ/ビュー生成の欠如です...そのため、SQL の場合のようにそのロジックをアプリケーション コードに入れることができないため、ビューの計画と正当化にかなりの量の作業を行う必要があります。 .
たとえば、次のような JSON ドキュメント テンプレートに基づいてログイン スキームを作成しました。
重複したアカウントの作成を防ぐために、キーとして検索するユーザー名のリストを生成する非常に基本的なビューを作成しました。
これは私にはかなり効率的であるように思えました。ドキュメントのリスト全体 (または各ドキュメントのフィールド数を減らすだけ) をドラッグするよりもはるかに優れていると思います。そのため、まったく同じことを行って、電子メール アドレスのリストを生成しました。
この質問で私がどこに向かっているのか分かりますか?
リレーショナル データベース (SQL を使用) では、同じテーブルに対して 2 つのクエリを作成するだけです。この手法 (ビューを SQL クエリの結果と同一視する) は、何らかの形で類似しているのでしょうか?
次に、パフォーマンス/効率の問題があります...これらの 2 つのビューは本当に 1 つにすぎないのでしょうか? または、キーがあり値が関連付けられていない Couch DB ビューを使用することは効果的な方法ですか? 上記の例を考えると、これらのビューはどちらもログイン スキームの外で使用されます... ユーザー名のリストを生成する必要がある場合は、追加のオーバーヘッドなしでそれらを取得できます。
どう思いますか?
mongodb - バッチ挿入のmongodbマイクロ最適化? それともこれは重要な最適化ですか?
前提: ドライバーはデフォルトで一方向のメッセージングで動作するため (getLastError
使用されない限り)、update ステートメントは無害です。
質問次のフラグメントは、大量の挿入のためにmongodbでこれを行うための最良の方法ですか? ステップ 2 と 3 を折りたたむことはできますか?
編集:古いバグのあるフォーム、以下を参照
$
オペレーターは更新のクエリ部分のクエリフィールドでプライミングを必要とするため、操作3から抜け出す方法はないと感じています。アミライト?イアムライト?
これが最善の方法である場合、コードを工夫して、更新操作に夢中になることはできますか?
編集:新しいフォーム
私の論理にバグがありました、ゲイツに感謝します。可能であれば、更新を折りたたみたい:D
注 :$addToSet
この場合は、要素ごとの一致を行うため、役に立ちませんmutable
。C++ OO のビットごとの比較用語のように、配列内の要素が何であるかを表現する方法はありません。
質問は無意味ですデータモデルが間違っています。クローズするために投票してください (OP)。
database - ドキュメント指向データベースまたはリレーショナルデータベース、どのように選択できますか?
私は過去にMySQLとMsSQLをかなり使用しています。現在、MongoDBも使用していますが、フィールドが変化し続けるドキュメントの処理に非常に柔軟性があり、アジャイル開発に非常に適しています。
ドキュメント指向データベースは開発者にとってはるかに便利であり、読み取りアクセスの点でも高速であるように思われるので、どちらの場合にも他の場合よりも適したユースケースの例をいくつか挙げることができますか?
php - PHPでオーバーロードされたオブジェクトの変数名を取得するにはどうすればよいですか?
私はPHPでオーバーロードを使用していますが、やりたいことは次のとおりです。オブジェクトを呼び出すと、次のようになります。
そのために、__get関数と__call関数を使用します。それらは次のようになります。
ただし、personとnameの変数名はいつでも変更される可能性があるため、知りたいです。私はこのようにしようとしました:
それらは保存されますが、別の行を追加すると、それが配列に追加されるだけです。関数が呼び出された後はクリーンアップされません。__callで配列を空にしようとしましたが、役に立ちませんでした。これをグーグルしたかったのですが、今のところ..運が悪いです。
PHPにこれのためのネイティブ関数はありますか?
-読むには多すぎますか?ここでやめて、残りはただもっと説明です-
ただし、__ callは配列を送信し、実際の関数を処理する別のクラスに送信します。
理由: mongoDBクラスに慣れている5人のプログラマーがいて、大規模なコードベースをMongoDBから別のDBに変更しています。この修正により、代わりにクエリを作成する手間をかけずに、コードベースのDB全体を一度に変更できるようになります。関数クラスでクエリを実行するだけです。(__callが呼び出されたときにアクセスします)。ただし、今日のDBクエリの一般的な行は次のようになります。
この回線は1つのデータベースに接続し、そのデータベース内でアカウントに接続します。ただし、$coreなどの「特別な」変数がいくつかあります。次のようになります。
それは同じデータベースに接続しません。
必要なのは、オブジェクト内に動的なオブジェクトのラインを構築できるようにすることです。名前が何であるかを見つける必要があるので、これらをクエリに入れることができます。すべてではなく、1行のみ。基本的に、キーベースのデータベース上のドキュメントベースのインフラストラクチャであり、多くのハッキングがあります。:-D
本当にありがとう!