スタートアップ企業はどのようなデータベース システムを検討すべきでしょうか?

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

質問

現在、多数のユーザーからの大量のテキスト エントリを集約する Web アプリケーションのプロトタイプを開発しています。このデータは頻繁に表示し、頻繁に更新する必要があります。現時点では、コンテンツを MySQL データベース内に保存し、NHibernate ORM レイヤーを使用して DB と対話します。ユーザー、ロール、送信、タグ、通知などを定義したテーブルがあります。このソリューションはうまく機能し、コードが素晴らしく健全に見えるので気に入っていますが、データベースのサイズがかなりの数に達したときに MySQL がどのように動作するかについても心配しています。結合操作を十分に高速に実行するのは難しいかもしれないと感じています。

これをきっかけに、次のような非リレーショナル データベース システムについて考えさせられました。 モンゴDB, カウチDB, カサンドラ または ハドゥープ. 。残念ながら私はどちらも経験がありません。MongoDB に関する良いレビューをいくつか読みましたが、面白そうです。それが最善の方法であることが判明した場合は、喜んで時間を費やして学びます。リレーショナル DBMS を使用しない場合に考慮すべき点や問題点を提供していただければ幸いです。

役に立ちましたか?

解決

ここでの他の回答は主に技術的な側面に焦点を当てていますが、次の点に焦点を当てた重要な点があると思います。 新興企業 物事の側面:

  • 人材の利用可能性。 MySQL は非常に一般的であり、より希少なデータベース システムと比較して、MySQL の開発者を見つけるのが簡単 (そしてさらに重要なことに、より安価) であることがわかるでしょう。この開発者ベースの拡大は、より多くのチュートリアル、より活発なサポート コミュニティなどを意味します。
  • 開発の容易さ。 繰り返しますが、MySQL は非常に一般的であるため、非常に多くのシステム/サービスで選択されるデータベースであることがわかります。この共通点により、外部統合が少し容易になる可能性があります。
  • あなたは、決して存在しないかもしれない状況に備えていますが、実際にそうなったとしても対処可能です。 敬意を払ってでも、MySQL の限界に近づいている企業 (スタートアップのことは言うまでもない) はほとんどありません (ここでは私は単なる推測にすぎません)。あなたのスタートアップが、適切に構造化され、十分なリソースを備えた MySQL データベースを機能不全にするようなデータ スループットに達する可能性は、ほぼゼロです。

基本的に、どのデータベースを使用するかを心配することに時間 (== お金) を費やす必要はありません。MySQL が処理できるためです。 たくさん データの量は十分に証明されており、十分にサポートされています。

技術的な話に戻りますが…を持つもの 遠い アプリの速度に大きく影響するのは、データベースの選択よりも、データをいかに効率的に処理できるかです。 キャッシュされた. 。効果的なキャッシュは、データベースの負荷を軽減し、アプリの全体的な応答性を高速化することに劇的な効果をもたらします。キャッシュ ソリューションを調査し、それらのソリューションを最大限に活用できる方法でアプリを開発していることを確認することに時間を費やしたいと思います。

参考までに、私が選んだキャッシュ ソリューションは次のとおりです memcached.

他のヒント

これまでのところ、リレーショナル側で MySQL の代替として PostgreSQL について言及した人は誰もいません。MySQL ライブラリは LGPL ではなく純粋な GPL であることに注意してください。そのコードにリンクした場合、そのコードを公開せざるを得なくなる可能性がありますが、より法的経験のある人ならその影響について詳しく教えてくれるかもしれません。一方、MySQL ライブラリへのリンクは、単にサーバーに接続してコマンドを発行することと同じではなく、クローズド ソースでも実行できます。

PostreSQL は通常、Oracle の無料代替品として最適であり、BSD ライセンスはよりビジネスに適したものになるはずです。

非リレーショナル データベースを好むため、移行がより劇的になることを考慮してください。データベースをカスタマイズする必要がある場合は、ライセンスの種類の要素も考慮する必要があります。

どのデータベースを選択するのが最適であるかに大きな影響を与えるものが 3 つありますが、言及していません。

  1. データのサイズ、またはデータベース内にファイルを保存する必要があるかどうか。
  2. 読み取りは膨大な数ですが、書き込みはほとんどありません (制限されている場合もあります)。その場合、データベースだけではなく、LDAP などのディレクトリが必要になります。
  3. データの分散や複製の重要性。ほとんどのリレーショナル データベースは、多かれ少なかれうまく複製できますが、その概念/設計により、データ分散をうまく処理できません...しかし、1 つのサーバーに収まらないほど多くのデータを処理したり、特別な別個/追加のサーバーを必要とするアクセス権を持ったりするでしょうか?

しかし、ほとんどの人は、SQL を学習するのが好きではないという理由だけで、非リレーショナル データベースを選択するでしょう。

あなたは、大量のデータでどう思いますか? MySQLのに、そして基本的にほとんどのリレーショナルデータベースエンジンは、適切なインデックスと正気のデータベースと、データのかなり大きな金額を扱うことができますスキーマます。

なぜあなたは、MySQLがセットアップ中に大きなデータ量をどのように動作するかをしようとしないのですか? MySQLのテストデータベースへの現実的なデータを生成するいくつかのスクリプトを作成して、システム上のいくつかの負荷を生成し、それが十分に高速であるかどうかを確認します。

それは十分に速くない場合のみ、最初のデータベースの最適化を考慮し、異なるデータベースエンジンへの変更を開始します。

NHibernateのには注意してください、素晴らしく、簡単なコードにある溶液を作製することは容易ですそのデータ量の大きい悪い性能を有しています。例えば団体と怠惰や熱心なフェッチを使用するかどうかは慎重に検討する必要があります。私はあなたがNHibernateはを使用してはならないことを意味していますが、NHibernateのは、例えば、どのように動作するかを理解することを確認していないもの「のn + 1つの選択」-problem手段ます。

測定、想定していません。

リレーショナルデータベースとのNoSQLデータベースは両方スケール非常、アプリケーションはそれぞれの場合において、右書かれ、そしてシステムならば、それは適切に調整されている上で実行されることができるかどうか。

だから、あなたはNoSQLの、それへのコードのためのユースケースを持っている場合。それとも、あなたはそれにリレーショナル、コードをより快適にしている場合。その後、対策は、それが実行する方法も、それがどのようにスケーリングするか、そしてそれのOKが、それで行く場合は、いない場合は、理由を分析ます。

あなたのしていることを技術で快適または他のいくつかの理由のためにそれを試してみたい場合を除き、

あなただけがあなたのパフォーマンスの問題を理解すれば、あなたは、エキゾチックな技術を探しに行く必要があります。

各データベースを試して、アプリケーションの開発が最も簡単なものを選択することをお勧めします。に行く http://try.mongodb.org 簡単なチュートリアルで MongoDB を試してください。最初は開発者の時間の方が CPU 時間よりも価値があるため、速度についてはそれほど心配する必要はありません。

多くの MongoDB ユーザーが ORM とキャッシュ層を捨てることができたことを私は知っています。Mongo のデータ モデルは、リレーショナル テーブルよりも操作するオブジェクトにはるかに近いため、コメント付きのブログ投稿など、ネストされたオブジェクトのリストが含まれている場合でも、通常はオブジェクトをそのまま直接保存できます。また、mongo はほとんどのサイトでそのままでも十分高速であるため、キャッシュの複雑な処理を回避でき、通常はよりリアルタイムなサイトを提供できます。たとえば、Wordnik.com 報告 1.2 TB / 50 億オブジェクト DB で、250,000 読み取り/秒、100,000 挿入/秒。

.Net から MongoDB に接続する方法はいくつかありますが、そのプラットフォームの使用経験が十分ではないので、どれが最適であるかを判断できません。

免責事項:私は MongoDB の 10gen で働いているので、少し偏見があります。

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