0

Google アナリティクスに似たアナリティクス ツールを開発しています。これにより、キーワード、訪問、ページがデータベースに保存されます。

多くの人に使ってもらいたいので、データベースは非常に急速に大きくなります。

データベースはどのようにセットアップすればよいですか? 監視されているすべてのアカウントとすべての Web サイトに対して 1 つのデータベースですか? それとも、アカウントごとに 1 つのデータベースを用意した方がよいでしょうか?

また、専用サーバーは1台から始める予定ですが、将来的には複数のサーバーが必要になるので、それを念頭に置いて構築する必要があります。

また、アカウントごとに複数のデータベースを作成すると、アプリのスキーマが変更されたときに、すべてのデータベースでアップグレード スクリプトを実行する必要があることもわかっています。

4

2 に答える 2

1

どのようなデータベースを使用する予定ですか? リレーショナル (PostgreSQL、MySQL) と「NoSQL」 (MongoDB、CouchDB) には大きな違いがあります。

PostgreSQL は私が経験した唯一のデータベースであるため、リレーショナル側の PostgreSQL についてのみ説明します。

まず、すべてを 1 つのデータベースに保持します。アカウントごとにデータベースを使用する利点はありません。

第二に、1 台のマシンでは十分に成長できないことを絶対に確認する必要があります。読み取りよりも多くの書き込みを処理するアプリケーションの種類を考えると、マスター/スレーブ レプリケーションは高可用性のためにのみ機能し、PostgreSQL を使用したマルチマスター レプリケーションは簡単ではありません。

私の最後の調査によると、それを行うための最も簡単な方法は、書き込みスケーラブルになるように設計されたPostgres-XC のようなツールを使用することでしたが、それがどれほど本番環境に対応しているかはわかりません。

もう 1 つの解決策は、Bucardo や SkyTools などのツールを使用することです。SkyTools の経験はありませんが、昨年は Bucardo を機能させるのに苦労しました。

最後の解決策は、シャーディングを行うことです。シャードする単純な方法は、次のようなことです shard number = id % 10。ただし、これを使用すると、シャードを追加/削除するたびにクラスターを再調整する必要があります。クエリを正しいシャードに送信するには、アプリケーションを「シャード対応」で作成する必要があります。

とにかく、前に言ったように、最初にシャード/クラスタ化する必要があることを確認してください。

「NoSQL」側については、どのソリューションの経験もありませんが、MongoDB と CouchDB がシャーディング自体を処理することは知っているので、これらのソリューションの方がはるかに簡単ですが、かなりあきらめます。

于 2012-10-22T12:14:58.123 に答える
1

ヴィンセントの答えを少し拡張します。

シャーディングに関しては、 PL/Proxyで良い経験を積んでいます。また、シャーディングを使用すると、問題 (読み取りまたは書き込み) なしで単一のマシンを超えることができます。

レプリケーションに関しては、Skytools のLondisteはセットアップと使用が非常に簡単です。これにより、Postgres 用の非常に優れたメッセージング ソリューションである PgQ を取得できます。

于 2013-11-05T17:00:33.963 に答える