43 ポイント 投稿者 GN⁺ 2024-08-19 | 18件のコメント | WhatsAppで共有
  • ほとんどのWebアプリケーションは永続的なデータ保存を必要とするため、新しいアプリケーションを作るときはデフォルトで Postgres を選ぶのがよい

なぜ sqlite ではないのか?

  • sqlite は良いDBだが、データは1つのファイルに保存される
  • これは、アプリケーションが1台のマシンでしか動かないことを意味する
  • デスクトップアプリやモバイルアプリには適しているが、Webサイトには適していないことがある
    • Webサイトでsqliteを使って成功している事例もあるが、たいていは独自のサーバーやインフラを自前で構築している場合である
  • プラットフォームが提供する自動データベースバックアップや、複数のアプリケーションサーバーを構成する機能を諦めなければならないかもしれない

なぜ DynamoDBCassandra、または MongoDB ではないのか?

  • これらのデータベースは優れた性能を発揮するが、前提条件が多い:
    • アプリケーションが行う処理とアクセスパターンを正確に把握している必要がある
    • 非常に大規模なデータ量までスケールさせる必要がある場合
    • 一貫性の一部を諦められる場合
  • これらのデータベースは分散ハッシュマップに近い形で動作するため、データの保存方法にクエリパターンの知識を反映させる必要がある
  • アクセス(クエリ)パターンが変わると、データ全体を再処理しなければならないこともある
  • リレーショナルデータベースなら簡単にインデックスを追加してクエリを実行できるが、NoSQLデータベースではそれが難しい
  • 分析クエリには向いていない
  • 大学生や新人開発者がMongoDBを使うなら、助けが必要になるだろう

なぜ Valkey ではないのか?

  • Redis として知られるこのデータベースは、非常に効率的なキャッシュとしてよく知られている
  • メインのデータベースとして使うこともできるが、次のような問題がある:
    • すべてのデータをRAMに保存するため高速だが、RAM容量には限りがある
    • データモデリングで妥協が必要になる

なぜ Datomic ではないのか?

  • これをすでに知っているなら「金の星」を差し上げたい
  • Datomic はリレーショナルNoSQLデータベースで、「事前設計(Up-front Design)」の問題がなく、いくつかのきれいな特性を持っている
    • データをテーブルではなくEAVT(entity-attribute-value-time)の組として保存し、汎用インデックスを使う
    • クエリを書くときに作成者と調整する必要がない。ある時点の「現在時点」のデータベースをクエリすればよい。新しいデータ、さらには削除(または「撤回/retractions」とも呼ばれる)であっても、実際には以前のデータを消さない
  • しかし、いくつか欠点がある:
    • JVM言語でしか動かない
    • Clojure 以外の言語ではAPIがよくない
    • 構造の悪いクエリによって発生するエラーメッセージが非常に不親切である
    • SQLツールのエコシステムのようなものがなく、ツールが不足している

なぜ XTDB ではないのか?

  • Clojureユーザーはたくさんのデータベースを作る
  • Datomic と似ているが、次のような特徴がある:
    • HTTP APIを提供しており、JVMに依存しない
    • 「システム時間」と「有効時間」の2軸でクエリできる
    • SQL APIをサポートしている
  • しかし最大の問題は、まだ「新興」であることだ。SQL APIは昨年登場し、最近ストレージモデル全体を変更した
    • 10年後も生き残っているだろうか? 長期的なサポートが不確実である

なぜ Kafka ではないのか?

  • Kafka は非常に優れた「追記専用(Append-Only)」ログで、TB単位のデータ処理に適している
  • 複数のチームが管理する複数のサービスから流入するデータで、イベントソーシング系の処理を行いたい場合には驚くほどうまく機能する
  • しかし
    • 小規模であれば Postgres のテーブルで十分代用できる
    • Kafkaコンシューマーを作るのは、思っている以上にエラーを起こしやすい。結局のところ、ログ上の自分の位置を追跡しなければならないからだ
    • 追加のインフラを管理しなければならない

なぜ ElasticSearch ではないのか?

  • データ検索がプロダクトの主機能なら、ElasticSearchは適した製品である
    • データをETLし、全体のプロセスを管理する必要はあるが、ElasticSearchは検索のために作られており、検索をうまくこなす
  • しかし検索が主機能でないなら、Postgres の組み込みテキスト検索機能でも十分である
    • 後から専用の検索エンジンを追加できる

なぜ MSSQL または Oracle DB ではないのか?

  • 自分自身に問うべき本当の質問は、「その価格に見合う価値があるのか?」である
  • ライセンス費用だけでなく、ロックインのコストも考慮すべきである
  • Oracleにデータを保存すると、永続的にOracleへ費用を支払い続け、開発者を継続的に教育しなければならない
    • エンタープライズ機能と財布のどちらかを永遠に選ばなければならない
  • 特定の機能がどうしても必要な場合でなければ、使わないほうがよい
    • MSSQLなしでは生きられないキラー機能がない限り、使うべきではない

なぜ MySQL ではないのか?

  • この部分は少し読者の助けが必要である
  • MySQLOracle が所有しており、一部の機能はエンタープライズエディションに閉じ込められている
    • もちろん、MySQL は長年使われてきており、広く使われている無料エディションもある
  • 私は Postgres のほうがより良い選択だと信じているが、MySQL については追加の情報が必要である

なぜAIベクターDBではないのか?

  • ほとんどのAIベクターDBは新しい技術であり、利用にはリスクがある
    • AIバブルを前提としたビジネスには慎重に向き合うべきである
  • あなたのビジネスがまた別のAIグリフト(詐欺)だったとしても、せいぜい import openai で十分だろう

なぜGoogle Sheetsではないのか?

  • 特に欠点はない。必要なら使ってよい

18件のコメント

 
hilft 2024-08-23

Firestore...

 
wedding 2024-08-20

こう断言する記事は、たいていジュニアがやりがちなミスなんだけど……

 
nemorize 2024-08-20

代わりにかわいい
C
SVを
差し上げ
ます

 
roxie 2024-08-25

zzz

 
bus710 2024-08-20

良い情報を得るには炎上狙いをしろ……という冗談を、なんだか思い出しますね(笑)
とはいえ、たいていのバックエンド開発者が最初に使うのは PostgreSQL ですし……

 
dicebattle 2024-08-19

私はPostgresのほうがより良い選択だと信じていますが、MySQLについての追加情報が必要です

(笑);;;;

 
[このコメントは非表示になっています。]
 
koxel 2024-08-19

MySQL Enterpriseの本当の問題はライセンスではなく、有償購入者であっても障害が起きた際のサポートが本当にひどいことです。
以前、MySQLのインデックスが壊れて起動しなくなったときも、サポートを依頼してOracleにサポートチケットを切ってもらえば電話対応します、というだけでした。
結局、顧客側でこれは無理だとなって、こちらで解決しなければならなかったので。
Oracleを信じてEnterpriseを使うくらいなら、無料版が一番です..

 
kaydash 2024-08-19

なぜmariadb、impala、hive、kuduではないのか

 
koxel 2024-08-19

MySQLのエンタープライズ機能は、自前のコネクションプールのように、そこまで必要な機能ではないし……
本当にエンタープライズ用途なら、これを使うより手前にSQLプロキシを設置したほうが、負荷分散にはもっと効果的です。
PgSQLは好きだけど……MySQLは調べもせずに「とにかく嫌だ」で済ませるなんて……www

 
iolothebard 2024-08-19

ただ Postgres を使ってください

ただ MySQL を使ってください…

  • なぜ PostgreSQL ではないのか? この部分は少し助けが必要です。
 
love7peace 2024-08-19

MariaDB は??

 
aer0700 2024-08-19

かなり大きな論争を呼びそうな投稿ですね…

 
aer0700 2024-08-19

SQLite を使う理由は、シンプルで、たいていの規模では普通にうまく動くからです。
とりあえず SQLite で先に実装しておいて、後で必要になったら PostgreSQL に移行しても、それほど難しくはないと思います。

 
xguru 2024-08-19

忘れたころに出てくる Postgres 礼賛記事。もうこれはそのまま楽しみましょう!

とにかくあらゆる場所で Postgres を使おう
PostgreSQL で十分
Postgres はいつからかっこよくなったのか

 
GN⁺ 2024-08-19
Hacker Newsの意見
  • MongoDBに対する否定的な意見は多いが、その大半は誤った情報である

    • MongoDBは初期段階でよく適している
    • データ量が大きくなっても問題なく動作する
    • 一貫性の問題もうまく解決されている
    • MongoDBはDynamoのような分散ハッシュマップではない
    • MongoDBの集計機能をよく知らない人が多い
    • 新人開発者がSQLを学ぶべきだという理由でMongoDBを使うなというのは不当である
  • SQLiteの利点

    • ファイルベースなのでバックアップが容易である
    • ORMを使えばSQLiteからPostgresへ簡単にアップグレードできる
  • 技術的欠陥を指摘することには意味がない

    • MongoDBのRick Houlihanは現在MongoDBで働いている
  • MySQLからPostgresへ移行する理由

    • Oracle傘下のMySQLにはビジネス上のリスクがある
    • Postgresにはデータ整合性を維持するためのツールがより多い
    • Postgresの拡張機能は開発時間の節約に役立つ
    • Postgresのツールエコシステムはより成熟しており、完成度が高い
  • Postgresの時間テーブル対応は不十分である

    • SQL:2011のシステム時間およびアプリケーション時間による「二重時間」バージョン管理が必要である
    • 複雑なレポート要件がある規制産業では時間テーブルが理想的である
  • SQLiteを使う理由が理解できない

    • Postgresのインストールは難しくない
    • SQLiteとPostgresの違いについての説明が必要である
  • Rick Houlihanの名前を誤って言及したことへの謝罪

    • DynamoDB/CassandraとMongoDBの比較は彼の講演で出たものである
    • MongoDBは非正規化された情報を保存するデータベースであり、アクセスパターンの変更に柔軟ではない
  • 知っているものを使い、有用なものをデプロイすることが重要である

  • MySQLはJavascriptのようなものだ

    • 悪い判断やリスク要因が多い
    • きちんと動作はするが、Postgresが存在するのにあえて使う理由はない
 
touguy 2024-08-19

Postgres はデータの整合性を維持するための手段がより多いです
=> もしよければ、例はありますか?

 
leftliber 2024-08-19

Postgres と比べた SQLite の欠点の一つは、schema をサポートしていないことですね。テーブルが数十個以上と多くなると、schema 単位でテーブルを分けて設計したほうがすっきりするのですが、SQLite ではそれができないので、テーブル名にすべての区分を入れなければならないんです。