するために使用されュまたはその他のドキュメント指向データベースシステム?[定休日]

StackOverflow https://stackoverflow.com/questions/1476295

  •  16-09-2019
  •  | 
  •  

質問

ためのプラットフォームを提供すのビデオとオーディオクリップ、写真やベクトル-grafics.を行っていましたMySQLのデータベースバックエンド、最近では Pythonの 保管すべてのメタ情報のファイルではPythonのより要です。例えば:写真あり Exif 情報ビデオがオーディオ-トラックがしい店舗データベースのようなデータの情報です。映像とベクトル-グラフィックな共有しながら共通メタ情報など。いかに、Pythonでは完璧にこの非構造化データで検索されます。

しかし、今後の開発プラットフォームを追加す。現在、次なる段階で提供するためのフォーラムを使用しています。の問題が生じるには:利用のMySQLデータベースは、良い選択保存フォーラムやフォーラムの投稿等の使用やPythonのこともあるのですか?

その質問はするために使用され易とするために使用RDBMS.何を体感してみて下さいpythonやMySQLだったのかを体感してみて下さいですか?

役に立ちましたか?

解決

nosql:それがそんなに簡単だったら, 、著者はMongodbについて書いています。

Mongodbはキー/バリューストアではありません。それ以上です。それは間違いなくRDBMSでもありません。私は制作にMongodbを使用していませんが、テストアプリを少し構築していて、非常にクールなキットです。それは非常にパフォーマンスがあり、フォールトトレランスと自動シェルディング(別名はスケーリングされます)を持っている、またはすぐに持っているかのどちらかです。 Mongoは、私がこれまでに見たRDBMSの代替品に最も近いものかもしれないと思います。すべてのデータセットとアクセスパターンでは機能しませんが、典型的なCRUDのために構築されています。本質的に大きなハッシュであるものを保存し、それらのキーのいずれかで選択できることは、ほとんどの人がリレーショナルデータベースを使用するものです。 DBが3NFであり、結合を実行しない場合(多くのテーブルを選択してすべてのオブジェクトをまとめるだけで、ほとんどの人がWebアプリで何をするか)、Mongodbはおそらくお尻を蹴るでしょう。

そして、結論で:

指摘すべき本当のことは、データベースを選択できないので、あなたが非常に素晴らしいものを作ることを妨げられているなら、あなたはそれを間違っているということです。 MySQLを知っている場合は、使用してください。実際に必要なときに最適化します。 AK/Vストアのように使用し、RDBMSのように使用しますが、神のためにキラーアプリを作成してください!これはほとんどのアプリにとって重要ではありません。 FacebookはまだMySQLを多く使用しています。ウィキペディアはMySQLをたくさん使用しています。 FriendFeedはMySQLをたくさん使用しています。 NOSQLは素晴らしいツールですが、それは確かにあなたの競争力になるのではなく、アプリを熱くすることはありません。そして何よりも、ユーザーはこれを気にしません。

次のアプリを何を作成しますか?おそらくpostgres。 nosqlを使用しますか?多分。 HadoopとHiveも使用する場合があります。私はすべてをフラットファイルに保持するかもしれません。たぶん私はマグレフでハッキングを始めます。 仕事に最適なものは何でも使います。 レポートが必要な場合は、NOSQLを使用しません。 キャッシュが必要な場合は、おそらく東京暴君を使用します。 酸性度が必要な場合は、NOSQLを使用しません。 たくさんのカウンターが必要な場合は、Redisを使用します。 トランザクションが必要な場合は、Postgresを使用します。 単一の種類のドキュメントがある場合は、おそらくMongoを使用します。 1日に10億個のオブジェクトを書く必要がある場合は、おそらくVoldeMortを使用します。全文検索が必要な場合は、おそらくSolrを使用します。揮発性データの全文検索が必要な場合は、おそらくSphinxを使用します。

私はこの記事が好きです、私はそれが非常に有益であると思います、それはnosqlの風景と誇大広告の良い概要を示しています。しかし、それが最も重要な部分です。RDBMSとNOSQLを選択することになると、正しい質問を自問するのに本当に役立ちます。私見を読む価値があります。

記事への代替リンク

他のヒント

ソーシャルアプリにMongoDBを2年間使用した後、私はSQL RDBMSなしで生きることが本当に意味することを目撃しました。

  1. さまざまなテーブル/コレクションからのデータに参加するなど、ジョブを書くことになります。これは、RDBMが自動的に行うことです。
  2. NOSQLを使用したクエリ機能は、劇的に不自由です。 MongodbはSQLに最も近いものかもしれませんが、それでも非常に遅れています。私を信じて。 SQLクエリは、非常に直感的で柔軟で強力です。 MongoDBクエリはそうではありません。
  3. MongoDBクエリは、1つのコレクションのみからデータを取得し、1つのインデックスのみを利用できます。 Mongodbは、おそらく最も柔軟なNOSQLデータベースの1つです。多くのシナリオでは、これはサーバーが関連するレコードを見つけるためのより多くの往復を意味します。次に、非正規化データを開始します。これは、バックグラウンドジョブを意味します。
  4. それがリレーショナルデータベースではないという事実は、あなたのデータが一貫していることを保証するために外部のキーの制約を持っていないことを意味します(一部の人はパフォーマンスが悪いと考えられています)。これが最終的にあなたのデータベースにデータの矛盾を作成することを保証します。準備して。ほとんどの場合、データベースを一貫性に保つためにプロセスまたはチェックの書き込みを開始する可能性があります。これは、RDBMにそれをさせるよりもパフォーマンスが良くないでしょう。
  5. Hibernateのような成熟したフレームワークを忘れてください。

すべてのプロジェクトの98%は、おそらくNOSQLよりも典型的なSQL RDBMSの方がはるかに優れていると思います。

この非構造化データを保存します

あなたが言ったように、MongoDBは非構造化データを保存するのに最適です。これにより、データをドキュメント形式に整理できます。これらのrdbmsのアルテナティブは呼ばれます nosql データストア(mongodb, couchdb, ヴォルデモート)これらのビッグデータストアからのより高速なデータアクセスが必要なアプリケーションに非常に役立ちます。

また、これらのデータベースの実装は、通常のRDBMよりも簡単です。これらは単純なキー値またはドキュメントスタイルのバイナリオブジェクトであるため、ディスクに直接シリアル化されています。これらのデータストアは強制しません 酸性特性, 、そして任意 スキーマ. 。これは何も提供しません 取引 能力。したがって、これは大きくスケーリングでき、より速いアクセスを実現できます(読み取りと書き込みの両方)。

しかし、対照的に、RDBMはデータに酸とスキーマを強制します。構造化されたデータを使用したい場合は、RDBMを進めることができます。

私は選択します mysql 作成のため フォーラム この種のもののために。これは大きく拡大しないからです。そして、これはデータ間の関係を構成する非常に単純な(一般的な)アプリケーションです。

おもんごういか基本的に店舗JSON.例えばシェアする画面でユーザーが扱う多くのJS物体とのネストしたいと考えていましたが続くこれらのオブジェクトは非常に強い引数を使用もんごういか.こDAL、MVC層の超薄型でないという理由によって、国連-包装のすべてのJSオブジェクトのプロパティは、いろなフィットした構造物(スキーマ)な自然に適合します。

しているシステムは、複数の複雑なJS物が中心で、私たもんごういかためいきが続くものもいます。当社のオンもアモルファスおよび非構造的、もんごういかを吸収する複雑な表しています。いカスタム報告層deciphersのアモルファスデータのための人消費は、見込んでいくます。

複雑なトランザクションが必要な場合は、RDBMSを使用すると思います。そうでなければ、私はMongodbを使用します - より柔軟で作業しやすく、必要に応じてスケーリングできることを知っています。 (私は偏見があります - 私はMongoDBプロジェクトに取り組んでいます)

誰が配布される、シャーディングフォーラムを必要としますか? Facebookかもしれませんが、Facebook-competitorを作成している場合を除き、MySQL、Postgres、または最も快適なものを使用してください。 Mongodbを試してみたい場合は、OKですが、それがあなたのために魔法をかけることを期待しないでください。他のすべてのものと同じように、それはその癖と一般的な厄介さを持っています。あなたが本当にそれに取り組んでいるかどうかはすでに発見したと確信しています。

確かに、Mongodbは誇大宣伝され、表面的に簡単に見えるかもしれませんが、より成熟した製品がすでに克服している問題に遭遇します。それほど簡単に誘惑されることはありませんが、「nosql」が成熟するか死ぬまで待ちます。

個人的には、設定された基準がないため(ほぼ定義上)、「nosql」は断片化で枯れ、死ぬと思います。ですから、私は個人的に長期的なプロジェクトのためにそれに賭けません。

私の本で「nosql」を保存できるのは、それがRubyまたは同様の言語にシームレスに統合し、コーディングとデザインにほとんど頭上で「永続的」にすることができるかどうかです。それは実現するかもしれませんが、それまでは今ではなく待ちます。もちろん、より成熟する必要があります。

ところで、なぜあなたはゼロからフォーラムを作成しているのですか?次世代のフォーラムを実際に作成していない限り、ほとんどの要件に適合するように調整できるオープンソースフォーラムがたくさんあります(私は疑っています)。

多くの企業がアプリケーションログからリアルタイム分析にMongoDBを使用していることを見てきました。そのスキーマの激しさは、レコードスキーマが時々変わる傾向があるアプリケーションログに実際に適合します。また、それ キャップコレクション 機能は、古いデータを自動的にパージしてメモリに適合し続けるため有用です。

それは私が本当にMongodbが適合していると思う領域の1つですが、MySQL/PostgreSQLは一般的に推奨されます。ウェブ上には、機能性と堅牢性だけでなく、多くのドキュメントと開発者リソースがあります。

あなたがマンゴを好みたいと思うかもしれない2つの主な理由は

  • スキーマ設計の柔軟性(JSONタイプのドキュメントストア)。
  • スケーラビリティ - ノードを合計するだけで、水平方向に非常によくスケーリングできます。

ビッグデータアプリケーションに適しています。 RDBMSはビッグデータには良くありません。

参加と「複雑なトランザクション」に関するこれらすべてのものはご存知のように、何年も前にコミット /ロールバックの「ニーズ」を説明したのはモンティ自身でした。とにかく(そしてデータベースではありません) - それはもう一度同じことです。必要なのは、Webアプリが行うことの99%のために、愚かでありながら信じられないほどきちんとしたデータストレージ/検索エンジンです。

前述のように、多くの選択肢から選択して、これらすべての選択肢を見てください。http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

私が提案するのはあなたの最良の組み合わせを見つけることです:mysql + memcacheは酸が必要であり、いくつかのテーブルに参加したい場合に本当に素晴らしいですmongodb + redisはドキュメントストアに最適ですNeo4Jはグラフデータベースに最適です

私がしていること:MySQL + Memcacheから始めて、私は使用しているので、他のデータベースフレームワークの使用を開始します。単一のプロジェクトでは、たとえばMySQLとMongoDBを組み合わせることができます!

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