問題タブ [key-value-store]
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.
database - スキーマレス データベース システムの魅力は何ですか?
MongoDB、CouchDB、SimpleDB などのスキーマレス (多くの場合、分散型) データベース システムについての話をよく耳にします。
それらが何らかの目的で価値があることは理解できますが、ほとんどのアプリケーションでは、特定のタイプの特定の数のフィールドを持つオブジェクトを永続化しようとしており、リレーショナル モデルで自動的に考えます。私は常に、一意の整数 ID、null/not null フィールド、SQL データ型、選択クエリを使用してセットを検索する行の観点から考えています。
私はこれらの新しいシステムの分散型の性質と簡単な JSON/RESTful インターフェイスに惹かれていますが、緩く型付けされたキー/値ハッシュが開発にどのように役立つかはわかりません。型が緩く、スキーマのないシステムが、クリーンなデータ セットを維持するのに適しているのはなぜでしょうか? たとえば、日付がない可能性があるときに、x と y の間の日付を持つすべてのアイテムを見つけるにはどうすればよいですか? 結合の概念はありますか?
多くのシステムには独自の違いと長所があることは理解していますが、パラダイムの違いについて疑問に思っています。これは自由回答形式の質問だと思いますが、おそらくコミュニティの回答と、これらのシステムの利点を個人的に見たコミュニティの方法は、私や他の人がいつこれらの (確かにもっとヒップな) システムを使用したいのかを理解するのに役立つでしょう。従来の RDBMS。
performance - 巨大なデータセットでのトークン カウンターの計算
膨大な量のテキスト (> 2 Tb、ウィキペディアのフル ダンプ) を調べ、表示されたトークンごとに2 つのカウンターを保持する必要があります (各カウンターは現在のイベントに応じて増加します)。これらのカウンターに必要な唯一の操作は増加です。2 番目のフェーズでは、これらのカウンターに基づいて 2 つの float を計算し、それらを格納する必要があります。
次の手順を実行する必要があります。
- 現在のイベントに応じて、大量のテキストを調べ、見つかった単語ごとに2 つのカウンターを増やします。
- すべてのトークンを調べ、それらのそれぞれについて、これらのカウンターに基づいて 2 つの追加の float を計算します。
- クエリを許可します (任意のトークンの値を取得します)。
要件とその他の詳細:
- O(10^8) トークンまでスケールアップする必要があります。
- 最終結果は非常に高速に照会する必要があります。
- テキストを読んでいる間、2つのカウンターの増加のみが行われます。これは 1 回限りの処理であるため、処理中にクエリは発生しません。値の更新のみ。
- 動的/更新可能なスキーマは必要ありません。
私は CouchDB と MongoDB を試してきましたが、あまり良い結果は得られませんでした。
この問題に対する最善のアプローチは何だと思いますか?
ありがとうございました!
編集 1:パトリシア トライを試して、すべてのキーがメモリに収まるかどうかをテストするように提案されました(そうではないと思われます)。1 つのステップで各キーの値を増やすための追加の演算子を使用したカスタム パトリシア トライが、可能な解決策になる可能性があります。
EDIT 2:「巨大」の意味を明確にしました: > 2 Tb のテキスト。詳細説明。
編集 3:一意のトークンの見積もり。Mike Dunlavey の提案に従って、一意のトークンを簡単に見積もってみました。データセットの最初の 830Mb では、一意のトークンは 52134 まで直線的に増加します。より多くのデータを処理した後に一意のトークンの数が遅くならない限り (これは可能性が高い)、O(10^8) 個の一意のトークンが存在するはずです。
編集 4: Java および Python ソリューションが推奨されますが、他の言語も問題ありません。
編集 5:通常、トークンには印刷可能な ASCII 文字のみが含まれますが、印刷可能な任意の Unicode 文字を含めることができます。小文字と大文字の両方をそのままにして、同じプロセスを試します。小文字のみ。
nosql - NoSQL データベースと多くのセミラージ BLOB
多数 (つまり 10 億を超える) の「中規模」のブロブ (つまり 20 KB から 2 MB) を格納するのに適した NoSQL (または他のタイプの) データベースはありますか? 必要なのは、A (識別子) から B (ブロブ) へのマッピング、指定された A から "B" を取得する機能、アクセス用の一貫した外部 API、およびシステムをスケーリングするために "別のコンピューターを追加するだけ" の機能だけです。 .
データベースよりも単純なもの、たとえば分散キー値システムでも問題ないかもしれません。その流れに沿った考えもあれば幸いです。
読んでくれてありがとう。
ブライアン
database - AIR 用のドキュメント指向 DB?
今日、私は Adobe Air にローカル SQL データベースがあることを知りました。これは素晴らしいことです。ただし、ほとんどすべてを処理するために XML ファイルと JSON ファイルを作成していました。アプリケーションを再構築していくつかの新しい機能を追加するよりも、埋め込まれたドキュメント指向の DB を使用して、既存のデータ ファイルに単純にインデックスを付ける方が便利なようです。
問題は、組み込みのドキュメント指向の DB を Adobe Air ランタイムで実行する最も簡単な方法は何かということです。
memcached - 外部エンティティに変更を通知できるメモリ内キー/値ストアはありますか?
インメモリ キー/バリュー ストアについて読んだことがありますが、実際に使用したことはありません。教育を受けていない私の頭に最初に浮かぶのは、CouchDB と memcached です (CouchDB は必ずしもメモリ内にあるとは限りませんが、インメモリとして使用されることがよくあります)。
外部エンティティに (RESTful API を介して) 変更を通知できるように、基本的なスクリプトをサポートするこれらのメモリ内ストアの 1 つを探しています。いくつかの予備調査では、CouchDB が変更通知と呼ばれるものをサポートしていることが明らかになりました。
Memcached はこのタイプの機能をサポートしていないようで、より一般的なストレージのみのサービスです (ここでも、私の無知が露呈する可能性があります)。
誰もこれを行った経験がありますか? 潜在的な落とし穴や頭痛に対する知恵の言葉はありますか? これらの機能をサポートする、リストに挙げていない他のソフトウェアはありますか?
database - マルチキー キーバリュー ストアはありますか?
複数の値でハッシュ化されたタプル、つまり t=(クリック、インプレッション、ctr) を格納するための専用ストアはありますか?たとえば、pageId、categoryId、userId、sessionId などです。
MySQL、MongoDb などを使用してこれを実行できることはわかっています。しかし、私は、(Java に) 埋め込まれた特殊な、さらにはマバイのストアをもっと探しています。複雑なクエリ言語や RDMBS のようなトランザクションを提供する必要はありません。しかし、原子性と耐久性はプロでしょう。;)
これは、集計データを複数の次元で格納する DWH タイプのアプリケーションにも使用できると思いますが、そのような製品は見つかりませんでした。
mysql - キーと値のペアを格納するテーブルから選択するための MySQL クエリが必要です
いくつかの項目とそのプロパティをキーと値のペアの形式でデータベース (mySQL) に保存する必要があります。以下のように行う予定です。
2 つのテーブルitems
とを使用しますitem_properties
。
items
item_properties
ここで、「効果」が「冷却」であるアイテムを選択する必要がある場合は、次のクエリを使用して選択できます (結果として「AC」と「冷蔵庫」が得られます)。
次のような複数のプロパティに一致するアイテムを選択するクエリを作成する方法を知りたい
- 「効果」が「冷却」で「消費」が「効率的」であるすべてのアイテムを選択します (これはアイテム「AC」に一致します)。
- 「type」が「split」または「heatMethod」が「coil」または「consumption」が「effecient」であるすべての項目を選択します (項目「AC」および「Heater」に一致します)。
親切に助けてください...よろしくお願いします!!
database - ファイル ハッシュ データベースを使用した京都内閣データベースで、ファイル サイズの増加を回避するにはどうすればよいですか?
私は以下を使用して開いています:
要素を入れたり抜いたりしています。実行の最後に、データベースは「空」になり、すべての要素を削除するため、count() 関数は 0 を返します。テストを繰り返すとファイル サイズが常に大きくなるのはなぜですか? 「ガベージコレクター」のようなものを実行して、削除されたレジスターをきれいにすることは可能ですか? 同じテストを 100 回実行すると、レコードが 2 つしかない場合でも、データベースのサイズは 500 MB になります。
「tune_defrag=10000」を入れてみましたがうまくいかなかったようです。
Obs .: 唯一のレジスターは 1K 未満です。レジスターがディスク内のスペースを大量に消費する理由がわかりません。
助けてくれてありがとう
performance - インデックスを許可するリモートKey-Valueストレージ?
私たちのプロジェクトでは、オブジェクト用の組み込みのメモリ内Key-Valueストレージがすでにあり、インデックスを作成し、それに基づいてストレージをクエリできるため、非常に便利です。したがって、「Student」のコレクションと、student.groupおよびstudent.sexの複合インデックスがある場合、グループ「ABC」のすべての男子学生を見つけることができます。削除なども同様です。
次に、クラウドでの作業にサービスを採用する必要があります。これにより、複数のサーバーが存在し、ユーザーリクエストを処理し、それらのサーバーが共有状態になり、このKey-Valueインデックス付きストレージに保存されます。ニーズに合わせてmemcashedを採用しようとしましたが、ほぼ理想的です。高速でシンプルで実績のあるソリューションですが、インデックスがないため、一時データの検索には使用できません。
memcashedのように、インデックスを使用してリモートキャッシュを作成する他の方法はありますか?
ありがとうございました。
.net - RavenDBにオブジェクトを保存するためのオブジェクト要件(制限)は何ですか
私はシステムで使用するためにRavenDBを研究しており(主に永続的なKey-Valueキャッシュとして)、保存できる実際のデータの制限を知る必要があります。
ドキュメントには「唯一の要件はルートエンティティの文字列Idプロパティである」と記載されていますが、私が見ているすべてのサンプルとチュートリアルには、単純な文字列、int、decimal、boolデータ型しか格納されていません。
このオブジェクトを保存することは可能ですか?
この(sudo)コードを使用しますか?
そして、次のように元に戻します。
フィードバックをお寄せいただきありがとうございます。私の考案した例をお許しください。これは、ドメイン知識/モデルの束を掘り下げることなく、私がやろうとしていることを説明できる最も簡単な方法でした。
カイル