4


1

Postgresql vs. MySQL:データサイズは互いにどのように比較されますか?

ほとんどがテキストデータである同じデータセットの場合、MySQLのデータと比較してPostgresqlのデータ(テーブル+インデックス)のサイズはどうですか?

  • PostgresqlはMVCCを使用しているため、データサイズが大きくなることが示唆されます

  • このプレゼンテーションでは、日本最大のブログサイトが話題になりました PostgresqlからMySQLへの移行。 Postgresqlから移行する理由の1つは、Postgresqlのデータサイズが大きすぎることです(p。 41):http://www.scribd.com/doc/2569473/Migrating-from-PostgreSQL-to-MySQL-at-Cocolog-Japans-Largest-Blog-Community [日本最大のブログであるCocologでのPostgreSQLからMySQLへの移行コミュニティ]

  • Postgresqlにはデータ圧縮機能があるため、データサイズを大きくする必要があります 小さい。 しかし、MySQLプラグインには圧縮機能もあります。

PostgresqlとMySQLのデータサイズが互いにどのように比較されるかについて、実際に経験した人はいますか?

4 Answer


3


両方とも、それぞれのドキュメントにストレージ要件があります。

MySQL:http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html + Postgres:http://www.postgresql.org/docs/current/interactive/datatype.html

この2つの簡単な比較では、「zomg PostGresにはビットフィールドを格納するのに2メガバイトが必要」というタイプの違いはありません。 PostgresはMySQLよりも高いメタデータオーバーヘッドを持っているか、データファイルをより大きなチャンクに拡張する必要があると思いますが、PostgresがMySQLへの移行が解決策となるスペースを「浪費する」ことは明らかです。


3


  • MySQLはMVCCも使用します。innoDBを確認してください。 しかし、PostgreSQLでは次のことができます FILLFACTORを変更して、将来の更新のためのスペースを作ります。 これにより、現在のデータだけでなく、将来の更新と削除のためのスペースを持つデータベースを作成できます。 autovacuumとHOTが適切に動作すると、データベースのサイズが安定します。

  • ブログは古いバージョンに関するもので、多くのことが変更されており、 PostgreSQLは、昔のように圧縮においてはるかに優れた仕事をします。

  • 圧縮は、データ型、構成、速度にも依存します。 状況に応じてどのように機能するかをテストする必要があります。

MySQLからPostgreSQLへの変換を数回行いましたが、これらすべてのケースで、PostgreSQLは約10%小さくなりました(MySQL 5.0 ⇒ PostgreSQL 8.3および8.4)。 この10%は、最も更新されたテーブルのfillfactorを変更するために使用され、これらはfillfactor 60〜70に設定されました。 速度ははるかに優れており(20人以上の同時ユーザーで問題は発生しませんでした)、データサイズも安定しており、MVCCが制御不能になったり、バキュームが大幅に遅れたりすることはありませんでした。

MySQLとPostgreSQLは2つの異なる獣であり、PostgreSQLはMySQLが人気のある信頼性に関するものです。


2


大きな列ストアの場合、postgresqlは「LZファミリーの圧縮技術のかなりシンプルで非常に高速なメンバー」を使用して圧縮することも活用します。

詳細については、http://www.postgresql.org/docs/9.0/static/storage-toast.htmlをご覧ください。

それはかなり低レベルであり、おそらく知る必要はありませんが、ブログを使用しているので、あなたはそれから利益を得るかもしれません。


1


インデックスについて、

MySQLはインデックスにデータを保存するため、インデックスが巨大になります。 Postgresはしません。 これは、PostgresのBツリーインデックスのストレージサイズは、それがまたがる列の数や列のデータ型に依存しないことを意味します。

Postgresは部分インデックスもサポートしています(例: WHERE status = 0)これは、数百行のみが必要な場合に数百万行を超えるインデックスの作成を防ぐための非常に強力な機能です。

Postgresに大量のデータを配置するので、テーブルをロックせずにインデックスを作成できると便利でしょう。

私のiPhoneから送信された。 スペルが間違っていて参照が不足しているのでごめんなさい