問題タブ [nosql]
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.
architecture - データベース内の実際のデータを考慮して、RDBMSとDocDBMSのどちらを選択すればよいですか?
私はここで聖戦を探しているのではなく、分散アーキテクチャについて考えており、RDBMSとDocDBMSのどちらを選択するかについて意見を求めています。
RDBMS(MySQL、PostgreSQL、MS Sql Serverなど)を使用することで得られるパワーを否定することはできません。RDBMSは30年以上開発されており、多くの問題が検討され、対処されてきました。
また、NoSQL / DocDBMSムーブメント(MongoDB、CouchDBなど)には、特にデータの保存、関連付け、複製の方法に独自の長所があることを考慮する必要があります。
DATAとその構造のみを検討する場合、ドキュメントベースのデータベースを使用するのはいつですか。リレーショナルデータベースを使用するのはいつですか。
誰かの好きな言語やプラットフォームに関連して、あるソリューションと別のソリューションのメリットについて話し合いたくありません。データの種類(つまり、金融取引、ブログ、CMSページ、ショッピングカートなど)とその構造(データポイント間の関係-つまり、コメントに関連するブログ投稿)に焦点を当てた議論を続けてください。
database - Cassandraクラスターを一連のLinodeVPSインスタンスにデプロイする際の「落とし穴」はありますか?
ApacheCassandraデータベース[原文のまま]について学んでいます。
LinodeやSlicehostの製品のような専用ハードウェアよりも少ないハードウェアにCassandraをデプロイすることについて、良い/悪い経験を持っている人はいますか?
Cassandraは、読み取り/書き込み/要求の負荷に合わせてWebサービスを簡単にスケーリングするための優れた方法だと思います...Cassandraノードを実行している別のLinodeを既存のクラスターに追加するだけです。はい、これは、パブリックWebサービスとCassandraノードを同じVPSで実行することを意味します(多くの場合、例外が発生する可能性があります)。
CassandraのLinodeのような展開の長所:
- プライベートVLAN; Cassandraノードはプライベートに通信できます
- 新しいLinodeをプロビジョニングするためのAPI(そしておそらくCassandraとその依存関係などをインストールする「StackScript」で構成する)
- 価格は正しいです
短所:
- 各ホストはVPSであり、もちろん専用ではありません
- 4GBのRAMが必要だと決めたら、RAM /コストの比率はそれほど大きくありません(たとえば、SoftLayer専用)
- 私が推測する2つのディスク(コミットログ用に1つ、データファイル自体用にもう1つのディスク)を好むディスクは1つだけです。とにかくこれは共有ハードウェアなので、おそらく議論の余地があります。
編集:少し役立つこれを見つけました:http ://wiki.apache.org/cassandra/CassandraHardware
1GBが最小であると思いますが、これは推奨事項ですか?たとえば、Linode 720でデプロイできますか(たとえば、Cassandraで500 MB使用可能)?http://www.linode.com/を参照してください
django - Django と NoSQL、すぐに使えるライブラリはありますか?
これまでのところ、Django はいくつかの RDBMS とうまく統合されています。NoSQL、スキーマレス、ドキュメント指向の DBMS が台頭しています。流行りのファッショナブルな DBMS を Django に統合する状況はどうですか? Django 用の本番環境対応または少なくともすぐに使用できるライブラリはありますか?
これまでのところ、私はこれらを手元に持っています:
c# - 開発者が SQL から NO-SQL (CouchDB、FathomDB、MongoDB など) への移行を開始するために必要な「精神的なステップ」は何ですか?
私は、リレーショナル データベースと、それらに対して効率的にコーディングする方法にしっかりと頭を悩ませています。私の経験のほとんどは、MySQL と SQL に関するものです。ドキュメント ベースのデータベースについて聞いていることの多くが気に入っています。特に、最近のポッドキャストで誰かが大きなパフォーマンスの利点について言及したときはそうです。では、その道をたどる場合、SQL から NO-SQL に移行するために必要な精神的なステップにはどのようなものがありますか?
それがあなたの答えに違いを生むなら、私は主にC#開発者です(今日、とにかく)。私は EF や Linq to SQL のような ORM に慣れています。ORM の前は、ジェネリックとデータリーダーを使用して独自のオブジェクトを展開していました。それは重要かもしれないし、そうでないかもしれない。
より具体的なものを次に示します。
- 結合についてどのように考える必要がありますか?
- SELECT ステートメントを使用せずにクエリを実行するにはどうすればよいですか?
- コードにプロパティを追加すると、既存の保存済みオブジェクトはどうなりますか?
(ここにあなた自身の質問を自由に追加してください)
nosql - NoSql クラッシュ コース/チュートリアル
SOでNoSQLがかなりポップアップするのを見てきました。なぜそれを使用するのかをしっかりと理解しています(ここ、ウィキペディアなどから)。これは、それが何であるかについての具体的で統一された定義の欠如が原因である可能性があります (具体的な実装というよりもパラダイムです)。私は自分のシステムにそれを実装します。私は、テーブルと結合の観点から物事を考えるリレーショナルデータベースの考え方に本当にこだわっています...
とにかく、それを使用するシステムのクラッシュコース/チュートリアル(NoSQLベースのシステムの「Hello World」のようなもの)またはSQLに基づく既存の「Hello World」アプリを使用するチュートリアルを知っている人はいますか?そしてそれを NoSQL に変換します (必ずしもコードではなく、大まかな説明です)。
nosql - Cassandra クラスターには少なくとも 3 つのノード/サーバーが絶対に必要ですか、それとも 2 つあれば十分ですか?
確かに単一ノード クラスタを実行できますが、ある程度のフォールト トレランスが必要です。
現在、2 台のサーバー (8GB RAM、プライベート VLAN @1GigE) をリースする余裕がありますが、3 台はリースできません。
私の理解では、Cassandra クラスターに必要な最小ノード数は 3 です。これは、2 つのノード間に過半数が存在する可能性はなく、バージョニングの競合を解決するには過半数が必要であるためです。ちょっと待って、「ベクトルクロック」とRiakのことを考えていますか?あっ!Cassandra は競合解決にタイムスタンプを使用します。
2 ノードの場合、推奨される読み取り/書き込み戦略は何ですか? 通常、すべての (両方の) ノードに書き込み、1 つのノード (N=2; W=N/2+1; W=2/2+1=2) から読み取る必要がありますか? Cassandra は 2 つのノードに対しても通常どおり Hinted-Handoff を使用しますよね?
これらの 2 つのサーバーは、同じデータ センター FWIW にあります。
ありがとう!
database - Retwis for RedisのようなCassandraのデータモデリング演習はありますか?
アプリケーションのエンティティ/アクター/オブジェクト/モノをCassandraに保存するためにマッピングする方法を学ぼうとしています。TwitterデータとRetwis[1]と呼ばれる典型的なアクセスパターンのモデリングに関するRedisの素晴らしいチュートリアルがありました。Cassandraの例をいくつか見つけました。
カサンドラのデータモデルをどのようにして直感的に理解し始めましたか?
mysql - MySQL から Cassandra への切り替え - 長所と短所?
ちょっとした背景として、この質問は単一の小さな EC2 インスタンスで実行されているプロジェクトを扱っており、中規模のインスタンスに移行しようとしています。主なコンポーネントは、Django、MySQL、および python と java で記述された多数のカスタム分析ツールであり、これらが面倒な作業を行います。同じマシンで Apache も実行されています。
データ モデルは次のようになります。大量のリアルタイム データがさまざまなネットワーク センサーからストリーミングされます。理想的には、現在の 15 分ごとのアプローチではなく、ロング ポーリング アプローチを確立したいと考えています (統計の計算とデータベース自体への書き込み)。データが入ってきたら、未加工のバージョンを MySQL に保存し、分析ツールにこのデータを解き放ち、別のいくつかのテーブルに統計を保存します。これらはすべて Django を使用してレンダリングされます。
私が必要とするリレーショナル機能 -
- [CassandraのAPIのSliceRangeはこれを満たしているようです]による注文
- グループ化
- 複数のテーブル間の多対多関係[Cassandra SuperColumns は 1 対多でうまく機能するようです]
- これについて Sphinx は素晴らしい全文エンジンを提供してくれるので、それも必要です。[Cassandra では、Lucandra プロジェクトがこのニーズを満たしているようです]
私の主な問題は、データの読み取りが非常に遅いことです (書き込みもそれほど速くありません)。今は多額のお金やハードウェアを投入したくありません。また、時間の経過とともに簡単に拡張できるものを選びたいと思っています。MySQL の垂直方向のスケーリングは、その意味で簡単ではありません (または安価です)。
基本的に、NOSQL について多くのことを読み、MongoDB、Cassandra、Voldemort などを試した後、私の質問は次のとおりです。
中程度の EC2 インスタンスでは、Cassandra のようなものに移行することで、読み取り/書き込みにメリットがありますか? この記事(pdf) は間違いなくそれを示唆しているようです。現在、毎分数百回の書き込みが標準だと思います。読み取りの場合 - データは約 5 分ごとに変更されるため、キャッシュの無効化はかなり迅速に行う必要があります。ある時点で、多数の同時ユーザーも処理できるようになるはずです。現在、MySQL では、インデックスが作成されていても、大きなテーブルでいくつかの結合を実行すると、アプリのパフォーマンスが低下します。32k 行程度のものは、レンダリングに 1 分以上かかります。(これは、EC2 仮想化 I/O のアーティファクトでもある可能性があります)。テーブルのサイズは約 400 万から 500 万行で、そのようなテーブルは約 5 つあります。
CAP定理と結果整合性を考えると、複数のノードでCassandraを使用することについて誰もが話しています。しかし、成長し始めたばかりのプロジェクトの場合、1 ノードの cassandra サーバーをデプロイする意味はありますか? 注意事項はありますか?たとえば、Django のバックエンドとして MySQL を置き換えることはできますか? 【おすすめは?】
シフトする場合、行をフェッチするために複数のルックアップを行う必要があるため、アプリの一部を書き直して、より多くの「管理」を行う必要があると思います。
MySQL をリレーショナル エンジンではなく、キー バリュー ストアとして使用することに意味があるでしょうか。そうすれば、安定したエンジンだけでなく、利用可能な多数の安定した API を利用することができます (必要に応じてリレーショナルに移行することもできます)。(これに関する Friendfeed からの Brett Taylor の投稿 - http://bret.appspot.com/entry/how-friendfeed-uses-mysql )
シフトを行った人からの洞察は大歓迎です!
ありがとう。
python - 動的言語からドキュメント データベースへのオブジェクトの永続化に関するアドバイスを求める
ドキュメント データベースで動的言語からオブジェクトを永続化する最も洗練された方法についての洞察はありますか?
私は C# の経験が豊富で、Python でプログラミングを始めたばかりです。同時に、MongoDB のコツを学ぼうとしています。
今、私は疑問に思っています: 私のデータを MongoDB データベースに永続化する最もエレガントな方法は何ですか? 私はいくつかのアプローチを検討しました:
すべての Python クラスで、状態を表す辞書とリストのグラフを作成できるようにします。さらに、そのようなグラフから状態を初期化できるようにします。オブジェクトを永続化したい場合は、そのグラフ表現を要求して永続化します。オブジェクトを取得したいときは、ドキュメント グラフを取得し、これを
__init__
クラスのメソッドに提供します。特定のオブジェクトを検査し、辞書とリストのグラフを作成できる別の Mapper クラスを作成します。これを MongoDB に保存できます。マッパーは、データがデータベースから取得されたオブジェクトの作成も担当します。
ドキュメント オブジェクト マッパーであるmongoengineを試してみました。ただし、特定のクラス (ドキュメント) からクラスを派生させなければならなかったときはがっかりしました。Microsoft の Entity Framework 1.0 と POCO サポートの欠如を思い出しました。特定のクラスから強制的に派生させたくありません。気分が悪いですが、これが本当に動的言語の問題なのかどうかはわかりません。
私の思考は、C# のバックグラウンドによって妨げられていますか? 動的言語が提供する柔軟性の範囲を理解していないと確信しているので、ベスト プラクティスに関するアドバイスやヒントをいただければ幸いです。
ありがとうございました。
database - 最も単純なデータベースの実装
私は本当に単純なデータベースの実装を探しています。基本的に、複雑な解析SQLエンジンを持たないものです。私が探しているのは、B +ツリーとACIDストレージ(教育目的に適しています)を示すものです。私が見つけたのは、現在の検索から今まではhamster-dbでした。より小さなコードベースでさらにシンプルなものを探しています。あなたの知識にそのようなオープンソースプロジェクトがあれば、私に知らせてください。