web-dev-qa-db-ja.com

ソーシャルネットワーク/ナレッジベースコミュニティのためのデータベース提案?

夏に始めたい新しいプロジェクトのために、さまざまなデータベースタイプとDBMSを調べています。

MySQLとpostgreSQLでシステムを構築しましたが、データベースに関する知識と経験を拡大したいと思っています。

私のプロジェクトは、一種のソーシャルネットワーク/集約的な知識のものになります。 (まだそれを説明する用語をまだ開発していません)。

私は見てきました:

  • Cassandra(独自のタイプのクエリ言語を使用する);機能豊富なコンテンツや、高性能なクエリ実行を実現するのに適しているようです。ただし、Java=の環境で作業する必要があり、Oracleとは何の関係もないので、あまり熱心ではありません。
  • MongoDB(DBMSのnoSQLタイプ);優れたスケーラビリティ。ただし、ビジネス情報クエリなど、実績のあるSQL言語ですでに利用可能なすべての機能を失います。

システムの要件:

  • データテキスト、日付、時間、xml、小さな整数、ブロブ、
  • 構造/動作:正規化3NF、非リアルタイム、リレーショナル、スケーラブル、ロバスト
  • Environment: unix/linux、Javaなし!、できればCで実行

私が調査する必要がある他のデータベースシステムを教えてもらえないかと思っていました。

オブジェクトリレーショナルデータベースも確認しました。PHPオブジェクト(PDO))で作業するというアイデアはとても気に入っていますが、パフォーマンスは少し悪いようです。

ここにDBAがいることを確認して、これらのシステムについて操作したフィードバックをいただければ幸いです。

ありがとう

12
tomaytotomato

あなたの抽象的な要件は私に「PostgreSQL」を叫びます。ただし、ブルジョワジーの最新情報を把握しておく価値はあると思うので、チェックしたいさまざまなもののリストを以下に示します。

無料のもの

  • CouchDB -最初のNoSQLデータベースの1つ、強力なmap/reduceクエリシステム、高度に分散されたフォールトトレラント。優れたNoSQL候補の1つ。
  • Hyperdex -検索機能を備えた非常に新しい分散ハッシュテーブル。
  • Riak -ある程度の価値がある分散ハッシュテーブル。

奇妙な無料のもの

  • Metakit - SQLite のような組み込みデータベースの詳細ですが、SQLベースではないため、手続き型です。
  • FramerD -非常にポインタ中心の、古典的な「ネットワーク」データベースによく似ています。たぶん死んだ?
  • Magma -Smalltalk OODBMS。クールですが、十分に文書化されていません。

フリーでないもの

  • AllegroGraph -RDF(グラフ)データベース、SPARQLをサポート。LISP風味。
  • Caché -元々はMUMPS(IIRC)に基づいたハイブリッドリレーショナル/ OOデータベース。
  • Objectivity -最後のいくつかの本当に大きなOODBの1つ。非常に強力で、印象的で、高価です。
  • VoltDB -非常にスケーラブルな、主にリレーショナルデータベース。 「最も」SQLをサポートします。とても新しい。コミュニティ版もあると思います。

結論

私はこれらのものを広範囲に使用していません。私はそれらのほとんどを少し遊んで、常にPostgreSQLを使用してきました。要件を見ると、PostgreSQLが最初から満たされていないのはスケーラビリティだけです。一方、私の目的では、単一の専用データベースマシンに$ 4000のハードウェアを投入する方が、この問題に$ 4000のクラウドノードやローエンドマシンを投入するよりもはるかに簡単です。そして EnterpriseDB のように、PostgreSQLでスケーラビリティを実現する方法があります。

これらの側面をいじってみるのはとても楽しいですが、貴重で再生不可能なプロダクションデータを何かに入れる時が来ると、信頼性、安定性、長期的な実行可能性などの退屈な属性が前面に出てきます。

あなたのための実験を考えた

このことを考慮。あなたがMark Zuckerbergであり、コードベースまたはデータを放棄することを選択する必要があるとします。すべての開発スタッフを維持できますが、すべてのコードを放棄する必要があります。つまり、開発者がすべてを実装した方法についてのすべての開発者の記憶がなくなったとも言えますが、すべてのユーザーアカウントとすべてのユーザーをアップロードしたままにすることができます。データとそのすべて、またはすべてのデータをあきらめることができます。すべての構造とサーバー、構成、セットアップを保持しますが、すべてのデータベースのすべてのテーブルのすべての行を失います。

データを失うほうが悪いことは明らかです。すべてのユーザーがそのすべてのデータを再生成するのはなぜですか?失われたすべてのマーケティングデータについて考えてみましょう。これがFacebookが実際に収益を上げる方法です。そして、人々にFacebookのクローンを使用する機会を得るためにたくさんの起業家が唾液を流しています。一方、コードベースを紛失した場合、おそらく現在よりもさらに優れたコードベースを再構築できますが、オンラインで何かを非常に短い順序で行うことができます。ヘック—おそらく他の誰かのFacebookクローンコードベースを購入して実際のデータをロードすることはできますが、そのデータをコピーすることはできません。 Facebookがまだサーバー上にすべての人の重要なデータを保持している場合、離れる動機ははるかに低くなります。まだ悪いですが、はるかに少ないです。驚くほど少ないです。

皮肉なことに、奇妙な事故ですべてのデータを失う方が、すべてのコードを失うよりもずっと簡単です。ただし、ほとんどのインターネット企業では、データ会社であり、データ最も価値のある資産。そして、これは、伝統的で長年の実績があり、昔ながらの、セクシーでないリレーショナルデータベースの使用を検討する大きな理由です。

4
Daniel Lyons

また、リレーショナルデータベースを使用できない理由や、nosqlデータベースを使用できない理由がないことも考慮してください。

6
HLGEM

Nosqlと言えば、私はFacebookの参照について1つだけ追加する必要があります。

非常に大きなスケールを計画している場合は、DBエンジンをシステム管理者向けにするか、開発者向けにするかをお勧めします。

地理的に分散できず、効率的かつ簡単にバックアップする方法がない、開発者フレンドリーで超高速のMongoDBを終了します。ここではMongoDBを使用していますが、システム管理者向けの仕様ではRiakまたはCouchDBの方が見栄えが良いようです(RiakまたはCouchDBの経験はありません)。

0
user92471