1740915676
2025-02-27 17:42:00
私は長い間データベースを実行してきましたが、大学から出てくるすべての研究は言うまでもなく、新しいテクノロジー、問題を解決するさまざまな方法に遅れずについていくべき新しいことが常にあります。 2025年には、これらのデータベーステクノロジーのそれぞれと1週間過ごすことを検討してください。
前文
これらは「7つの最高のデータベース」ではなく、BuzzFeedリスト留めに類似したものではありません。これらは、1週間ほどで実際に検討する価値があると思われる7つのデータベースです。 「Neo4jやmongodb、mysql/vitessまたはvitessまたはmysql/vitess」のようなことを尋ねるかもしれません。答えは、それらが面白いとは思わないということです。また、Kafkaやその他の同様のストリーミングデータサービスをカバーしていません – 間違いなく時間の価値がありますが、カバーされていません。
この投稿は、元の本に触発されました 7週間で7つのデータベース エリック・レドモンドとジム・ウィルソンとのリュック・パーキンス。
目次
1。postgreSql
デフォルトのデータベース
「Postgresを使用するだけ」は、この時点で基本的にミームであり、正当な理由があります。 postgreSql の頂点です 退屈なテクノロジー、そして、データベースにクライアントサーバーモデルが必要なときに到達するデータベースである必要があります。酸に準拠し、複製のための興味深いトリックがたくさんあり、物理的および論理的な両方であり、すべての主要なベンダーで非常によくサポートされています。
ただし、Postgresの私のお気に入りの機能はそうです 拡張機能。これは、他のデータベースがほとんどできない方法でPostgresが本当に生きていると感じる場所です。あなたが望むことができるほとんどすべての拡張機能があります – 年 グラフデータ構造とCypherクエリ言語のユーザーを有効にします。 TimesCaledB タイムシリーズワークロードを有効にします。 ハイドラカラム 代替の柱状ストレージエンジンなどを提供します。私 拡張機能の作成について書いた 比較的最近では、自分で試してみたいなら。
Postgresはその理由で優れた「デフォルト」データベースとして輝いており、さらに多くの非投稿サービスが依存していることがわかります。 ポストグレスワイヤプロトコル クライアントの互換性を提供するための汎用層7プロトコルとして。豊富なエコシステム、賢明なデフォルトの動作、そしてそれが WASMインストール 理解する価値のあるデータベースになります。
Postgresで可能なことについて学び、その制限のいくつかも1週間を費やします – MVCC 気まぐれにすることができます。お気に入りの言語でシンプルなCRUDアプリを実装してください。ポストグレス拡張機能を構築するかもしれません。
2。SQLITE
ローカルファーストデータベース
クライアントサーバーモデルから移動すると、迂回路を「組み込み」データベースに取り入れます。 sqlite。私はこれを「ローカルファースト」データベース。SQLiteデータベースは、アプリケーションと直接共同住宅されています。この使用法の最も有名な例の1つは whatsapp、使用されているデバイス上のローカルSQLiteデータベースとしてチャットを保存しました。 信号 また、同じことをします。
それを超えて、私たちはローカル酸に準拠したデータベースを「ただ」するのではなく、SQLiteのより創造的な使用を見始めています。のようなツールの出現で ライトストリーム ストリーミングバックアップを有効にします Litefs 分散アクセスを提供するために、より興味深いトポロジを考案できます。のような拡張機能 cr-sqlite の使用を許可します CRDTS 使用されている変更セットをマージするときに紛争解決が必要になることを避けるために 腐食。
SQLiteは、おかげで小さな復活もありました Ruby on Rails 8.0 -37SignalsはSQLiteですべてを獲得し、次のようなレールモジュールを構築しました しっかりしたキュー 複数のSQLiteデータベースを操作するようにRailsを構成します database.yml この目的のために。 Blueskyは、個人データサーバーにSQLiteを使用しています – すべてのユーザーには、独自のSQLiteデータベースがあります。
SQLiteを使用してローカルファーストアーキテクチャを実験して1週間かけて、Postgresを使用してクライアントサーバーモデルを「Just」を代わりに必要とするものに移行できるかどうかを確認してください。
3。Duckdb
クエリアニシングデータベース
次の埋め込みデータベースには、あります duckdb。 SQLiteと同様に、DuckDBはインプロセスデータベースシステムになることを目的としていますが、オンライン分析処理(OLAP)とオンライントランザクション処理(OLTP)により焦点を当てています。
duckdbが輝くのは、SQLを選択した方言として使用して、「クエリアニス」データベースとしての使用です。 CSV、TSVS、JSONなどからデータをネイティブにエンジンに引き込むことができますが、Parquetのようなフォーマットもあります。 データソース。これにより、柔軟性が非常に高くなります – チェックアウトしてください Bluesky Firehoseを照会するこの例。
Postgresと同じように、duckdbも 拡張機能があります、それほど豊かではありませんが、結局のところ、DuckDBはずっと若いです。コミュニティから貢献した多くは、 コミュニティ拡張のリスト、私の特定のお気に入りはそうです gsheets。
DuckDBでデータ分析と処理を行うために1週間かけてください – Pythonノートブックなどを介して 証拠、たぶん、SQLiteデータベースの分析クエリをDuckDBにオフロードすることにより、SQLiteを使用した「ローカルファースト」アプローチにどのように適合するかを見ることができます。 それを読むことができます。
4。クリックハウス
列データベース
組み込みデータベースの球体を残しますが、分析のテーマに固執しているので、 クリックハウス。対処するために2つのデータベースしか選択しなければならなかった場合、PostgresとClickhouseだけで非常に満足しています。前者はOLTPの前者、後者はOLAPです。
Clickhouseは分析ワークロードを専門としており、非常に高いインゲストレートをサポートできます 水平スケーリング およびシャードストレージ。また、サポートしています 階層型ストレージ、「ホット」と「コールド」データを分割できるようにする – gitlab これについてはかなり徹底的なドキュメントを持っています。
Clickhouseが独自に登場するのは、DuckDBのようなものには大きすぎるデータセットで実行する分析クエリがある場合、または「リアルタイム」分析が必要な場合です。これらのデータセットの周りには多くの「ベンチマーケット」がありますので、ここで繰り返すつもりはありません。
Clickhouseをチェックすることを提案するもう1つの理由は、それが 喜び 操作する – 展開、スケーリング、バックアップなど よく文書化されています – 設定までです 適切なCPU知事 カバーされています。
いくつかのより大きな分析データセットを探索するか、DuckDB分析の一部を上からClickhouseの展開に変換する1週間を費やしてください。 Clickhouseには埋め込みバージョンもあります – chdb – より直接的な比較を提供できます。
5。FoundationDB
階層化されたデータベース
ここで、このリストの「心を拡大する」セクションを入力し、 FoundationDB。間違いなく、FoundationDBはデータベースではありませんが、文字通りの基盤です a データベース。 Apple、Snowflake、Andによって生産で使用されています Tigrisデータ、FoundationDBは、キー価値ストレージの世界で非常にユニークであるため、時間の価値があります。
はい、それは順序付けられたキーと価値のストアですが、それはそれについて興味深いものではありません。一見すると、いくつかの好奇心が強いです 制限 – トランザクションは10MBの影響を受けるデータを超えることはできず、トランザクションで最初の読み取りから5秒以上かかることはありません。しかし、彼らが言うように、制限は私たちを自由にしました。これらの制限をとることにより、非常に大規模に完全な酸トランザクションを達成できます。100以上のTIBクラスターが稼働していることが知られています。
FoundationDBは、特定のワークロードと 広範囲にテストされました このリストの別のデータベースを含む他のテクノロジーによって取り上げられたシミュレーションテストを使用し、 アンチテーゼ、いくつかの元ファウンドDBの人々によって設立されました。これに関する詳細については、チェックしてください タイラー・ニーリー そして フィルイートンズ トピックに関するメモ。
前述のように、FoundationDBにはいくつかの非常に具体的なセマンティクスがあります。 アンチフィーチャー そして 特徴 ドキュメントは、彼らが解決しようとしている問題を理解するために自分自身に慣れる価値があります。
しかし、なぜそれは「レイヤー化された」データベースなのでしょうか?これはのためです レイヤーコンセプト。ストレージエンジンをデータモデルに結び付ける代わりに、代わりにストレージは異なるレイヤー間で再マッピングできるほど柔軟です。 Tigrisデータ そのようなレイヤーの構築について素晴らしい投稿をしてください、そして、 レコードレイヤー そしてa ドキュメントレイヤー FoundationDB orgから。
1週間を過ごします チュートリアル そして、ようなものの代わりにFoundationDBを使用する方法について考えてください Rocksdb。多分いくつかをチェックしてください デザインレシピ そして、読んでください 紙。
6。TigerBeetle
執着してデータベース
決定論的なシミュレーションテストから流れる、 TigerBeetle それは明らかにあるという点で、以前のデータベースから型を破ります ない 汎用データベース – 金融取引専用です。
なぜこれは見てみる価値があるのですか?単一目的のデータベースは珍しいです 執着して正しい Tigerbeetleは真の希少性であり、特にオープンソースであることを考えると、真の希少性です。それらにはすべてが含まれています NASAの10ルールの力 そして プロトコル認識回復、厳格なシリアル化可能性と直接I/Oに至るまで、カーネルページキャッシュの問題を回避します。そうです 真剣に 印象的 – 彼らを読んでください 安全文書 そして彼ら プログラミングへのアプローチ彼らはタイガースタイルと呼びます。
Tigerbeetleについてのもう1つの興味深いポイントは、それが書かれていることです ジグ – システムプログラミング言語学校の相対的な新人ですが、タイガービートルの人々が達成しようとしていることに明らかに適しています。
Tigerbeetleのローカル展開で金融アカウントをモデル化する1週間を費やしてください – フォローしてください クイックスタート そして、を見てください システムアーキテクチャ 上記のより汎用データベースの1つと組み合わせて使用する方法についてのドキュメント。
7。Cockroachdb
グローバルデータベース
最後に、私たちは一周します。私はここに最後のスロットに何を置くかについて少し苦労しました。もともと考えがありました ヴァリ、しかし、FoundationDBはキー価値のかゆみを傷つけました。グラフデータベースなどについて考えました scylladb または カサンドラ。考えました dynamodb、しかし、それをローカルで実行できない/無料で私を先送りにしてください。
最終的に、私はグローバルに分散したデータベースを閉じることにしました – Cockroachdb。これは、ワイヤプロトコルの互換性があり、上記のより興味深い機能のいくつかを継承します – 大きな水平スケーリング、強い一貫性 – そして、それ自体のいくつかの興味深い機能があります。
CockRoachDBは、Googleのものに基づいて、複数の地域でデータベースをスケーリングすることを可能にします スパナ 非常に正確な時間同期のために、アトミッククロックとGPSクロックに依存するシステム。ただし、コモディティハードウェアにはそのような贅沢がありませんので、Cockroachdbにはいくつかがあります 巧妙なソリューション NTPとのクロック同期遅延を考慮するために読み取りが再試行または遅延される場合、ノードはまた、最大オフセットを超える場合はメンバーを終了するクロックドリフトを比較します。
Cockroachdbのもう1つの興味深い機能は方法です マルチリージョン構成 を含む テーブル局所、あなたが作りたい読み取り/書き込みトレードオフに応じて異なるオプションがある場合。
再実装に1週間を費やします movr あなたが選んだ言語とフレームワークの例。
まとめ
私たちはさまざまなデータベースを探求しましたが、すべて地球上の大企業のいくつかが生産で使用していましたが、これがあなたが以前に慣れていなかったいくつかのテクノロジーにさらされることを願っています。興味深い問題を解決するためにあなたと一緒にこの知識を持ってください。
#2025年の7週間で7つのデータベース