MongoDBとPostgresQLの無責任初歩テスト

3077 ワード

PostgresQLは1秒に何本の記録を挿入できますか?MongoDBは?読み取りの状況はどうですか?私はいくつかの简単なプログラムを书いて、いくつかの简単なデータを得て、ここに贴って分かち合って、引き続き下へ読む前に本文のタイトルの中の“无责任”に注意してください、これはこのテストの结果が本当の生产环境の下の情况を代表しないことを表して、みんなに1つの比较的に直観的な概念をあげることしかできなくて、アーキテクチャを设计する时の试算に用いることができます.(階級的には基本的に正しいはずです)
今回のテストで選択したサーバ環境は次のとおりです.
  • VMWare仮想マシン(デュアルコア、4 Gメモリ)
  • CentOS 7
  • MongoDB 3.2
  • PostgresQL 9.4
  • クライアントはいずれもJava版
  • シングルスレッドクライアント
  • データの挿入は簡単ですが、PostgresQLでは次のようなテーブルが作成されます.
    CREATE TABLE realtime(
        id BIGINT PRIMARY KEY,
        longtitude DOUBLE PRECISION,
        latitude DOUBLE PRECISION,
        velocity DOUBLE PRECISION,
        soc DOUBLE PRECISION
    );

    これに対応して、MongoDBのDocumentは概ね次のようになります.
    {
        "_id" : NumberLong(1458587322),
        "longitude" : 0.5812149460333115,
        "latitude" : 0.23716701482457414,
        "velocity" : 0.9920389498763238,
        "soc" : 0.6602090307636349
    }

    データはランダムに生成され、idのみがインデックスです.

    100万個のデータを挿入

  • MongoDB(ACK付き)-約300秒(約3300本/秒)
  • MongoDB(ACKなし)-約35秒(月28000本/秒)
  • PostgresQL-約670秒(約1500本/秒)
  • ACKを持たないMongoDBの速度はPostgresQLの約20倍で、書き込み項目数は簡単に万を破ることができます.

    ランダム・クエリー(インデックスなし、600万個のデータ)

  • MongoDB-約2秒
  • PostgresQL-約0.5秒
  • 今回はPostgresQLが優位で、MongoDBの約4倍の速度です.

    1万個のデータを順番に読み込む

  • MongoDB-約0.1秒
  • PostgresQL-約0.5秒
  • 今回はモンゴDBが優位で、PostgresQLの約5倍の速度です.
    モンゴDBとPostgresQLは2つの異なるデータベースシステムだと言っているかもしれませんが、どうして一緒に比較しますか?私はもちろん知っています.だから、比べてみました.(ほほほ)比較してから、どのようなデータベースを使って、どのようにしてその能力を最大限に発揮することができますか.そこで、次のような「無責任」な結論が得られました(あるいは小さな提案です).
  • PostgresQL機能は強力で汎用性が高く信頼性が高く適用範囲が広い(うん?私のテストはこの点を反映していませんか?これらの詳細を無視してください)
  • MongoDBは論理が簡単で、記憶量が大きく、性能要求が高いのに対し、信頼性要求が相対的に高くない場合
  • に適している.
  • のストレージ容量が大きい場合、MongoDBのクエリはインデックス
  • に依存する必要があります.
  • MongoDBのインデックスが少なければ少ないほどパフォーマンスが良くなり、ディスク容量の消費量が少なくなり(インデックスは不要)、前の点と自己バランスを取りましょう
  • .
    実際の状況はどのような違いがありますか?実際にはこれよりもパフォーマンスが高いに違いありませんが、今回はローカルの仮想マシンを1台使って単一スレッドでアクセスしてみただけですが、実際の環境では高構成のサーバホストにマルチスレッドを追加するに違いありません.一般的には関係型データベース(PostgresQLという)の1台のホスト上での表現には確かに個性的なボトルネックが存在し、毎秒万件を書き込むのは関係型データベースにとって骨が折れる.このボトルネックに遭遇したら、システムアーキテクチャの調整を考慮し、NoSQL(MongoDBという)を使ってデータストレージを割り当てることができる.もちろん、論理が複雑で、事務性の要求が高いデータはPostgresQLを使わなければならない.MongoDBは、「大きくて馬鹿」なデータを格納するために使用されます.