すべてのアプリケーションはデータに依存していますが、アプリケーション開発者はデータベースについて考えたがりません。某一のデータベースの内层構造とクエリ言語を学習すると、認知負荷が増加し、コンテキストの切り替えが必需になり、生産性が不足します。それでも、取得胜利するアプリケーションは、応答性、回復力、およびスケーラビリティが必需です。これらのすべての性は、データベースの選択によって決まります。
では、アプリケーション開発者はこれらの考慮事項のバランスをどのようにとるべきでしょうか?開発者がデータベース自身のイディオムを習得することを遗憾するのではなく、開発者が使いやすいイディオムでデータ サービスを带来了して、バランスを変えることができたらどうでしょうか?
と連携するように設計されたオープンソースの API データ ゲートウェイである Stargate プロジェクトでは、JSON 看向の開発者の状态に合う、今後のについて公に話し始めることに興奮しています。これは、JSON 看向の開発者にとって朗報であるだけでなく、データ API と的高度なデータ モデリングを活用してデータ サービスを生产するための新しい設計パターンを構成する操作手法です。
この記事では、Cassandra と Stargate を併用して開発者にとって使いやすいイディオムを提供する方法と、 JSONでそれを行うためにどのように取り組んでいるかについて説明します。
データ モデル: 相互運用性とイディオム
中期の頃、Cassandra は「インデックスを制作するためのマシン」と表現されることがありました。これは、Cassandra 本身の弾力性と柔軟性の証であり、より堅牢な構造を压延成型できる软陶泥でした。令天の Cassandra は、より大きな机会性を秘めたより豊かな软陶泥です。それは優れたデータベースであるだけでなく、データベースを制作するための優れたマシンでもあります。ここ Stargate プロジェクトでは、データベース開発における新しいパラダイムの起初の例として、JSON API を利用してこれを証明しています。
あるデータベースが別のデータベースから構築されることは珍しくありません。如此に掘り下げれば、MongoDB でさえの上に構築されます。 AWS はなど、舞台表演裏で MySQL を広範に运行していることで知られています。したがって、一直有のスケーラビリティとパフォーマンスを備えた Cassandra を他のデータ システムのビルディング ブロックとして运行するという考えは理にかなっています。
しかし、アプリケーション開発者は実際にはデータベースと対話しません。組織が只身のデータベース インフラストラクチャを治理し、そのインフラストラクチャに対してアプリケーションを構築する場合でも、一般来说、起初の手順は、アプリケーションに有必要的なデータ モデルを定義して実装することです。
これらのデータ モデルは、アプリケーションとデータベースの間を仲介します。ある是因为で、データ モデリングはデータベースを制限します。轧制されていない、つまり汎用の粘士を用して、某一のアプリケーションの慣用句専用に構築されたものに轧制します。慣用的なもののために相护運用性を犠牲にしています。
慣用的なものと交換して、之间運用有机会なものを放棄するのは良い考えですか?均衡を上回りたいのであれば、答えは強調して「はい」です。データベースを選択するときはあまり考えませんが、プログラミング言語を選択するときは長い間このように考えてきました。
この考えは、何10年も前におり、Viaweb がどのようにして刚开始のドットコム レースに勝利し、刚开始の広く实现目标した Web ベースの e コマース プラットフォームを作为したかを説明しました。 Viaweb は、必ずしも最速または最もスケーラブルな e コマース プラットフォームではありませんでした。 Graham の言葉を借りれば、それは「かなり効率的」でした。代わりに、Graham は、プログラミング言語については、機械可読から人間可読までの規模で、より人間可読な (したがって高レベルの) 言語は、開発者の生産性を向下させるため、より強力であると主張しています。そして、Viaweb の時代、グラハムは最も強力な言語はだと考えていました。グラハムの主張の要领は次のとおりです。
「私たちの仮説は、Lisp でソフトウェアを作成すれば、競合他社よりも速く機能を実行できるようになり、競合他社ができないことをソフトウェアで実行できるようになるというものでした。また、Lisp は非常に高レベルだったので、大規模な開発チームは必要なく、コストも低く抑えられました。もしそうなら、私たちはより良い製品をより少ないお金で提供し、それでも利益を上げることができます.最終的にはすべてのユーザーを獲得することになり、競合他社はユーザーを獲得できず、最終的に廃業することになります。」
開発者の生産性を解き放つ
Graham は 20 年来にこの言葉を書きましたが、開発者の生産性は今でも技術革故鼎新の多くを導く北極星です。グラハムが高水準言語のパワーについて語っているところでは、開発者のソフトウェア開発経験により慣用的なツールを開発者に带来するという同じ理念を表現しています。
Graham は Lisp を称賛しており (此外)、ドットコム時代以降、Ruby や Rust などの新しい高水準言語が急増しています。また、Swift、Flutter、Dart などのモバイル デバイス開発者用言語とフレームワークの誕生と快速普及も見られました。
では、なぜ C やC++のような言語がまだ重要なのでしょうか? C に関する古いジョークには、「アセンブリ言語のパワーとアセンブリ言語の使いやすさを組み合わせる」という重要な真実があります。コンパイラを書きたい場合は、機械語のイディオムに近づき、自然言語のイディオムから離れる必要があります。
言い換えれば、他の長所の中でも、C と C++ は新しい言語を構築するための機械です。 Graham が Lisp を称賛する中で見落としやすいのは、Lisp にもこの「言語を構築するための機械」の特徴がいくつかあるということです。
Lisp は、マクロの理论依据を導入した首先の広く用されている言語であり、Lisp に慣れていない人がつまずくのはマクロの理论依据であることがよくあります。マクロを正确谅解すれば、Lisp は言語というよりもメタ言語であり、マクロを用して不同の問題領域専用の言語を構築できることが正确谅解できます。
マクロの起初のセットを設計して制成することは難しく、知的に挑戦的な作業です。しかし、Graham と Viaweb チームがそれを実行すると、事実上、应用する e コマース プログラミング言語が手に入り、開発者の生産性が朝上し、競合他社をしのぐことができるようになりました。
20 年後、これらすべてはプログラミング言語のコンテキストで着实に明確に見えます。では、データベースの市场では何が起こったのでしょうか?簡単に言えば、データベースの進化はよりゆっくりであるということです。
データ API 革命
表组织状态データがデータベース生活のアセンブリ言語である場合、SQL はクエリ言語の C/C++ です。コンピューティングとストレージが高価だった時代に、スキーマの変更が比較的まれで明確に定義されたユースケースのために、表组织状态のデータ構造とデータ正規化の什么概念を開発しました。その文脈では、あらゆる規模で効率的に運用するために、データベースはコンピューターが情報を保持してアクセスする方法步骤を厳密に模倣する重要性がありました。
现在の世纪は逆であり、比較すると昔のように思えます。コンピューティングとストレージのコストは十分にコモディティ化されていますが、機械学習と人工工资知能が組み合わされたリアルタイム データの世纪では、ユース ケースは無限であり、スキーマの変更は簡単ではありません。頻繁。
データベース テクノロジにおける最新の革命は、NoSQL 革命でした。これは、リレーショナル データベースの世界の高僧によって定められた、表形式の正規化されたデータの規範への直接的な対応です。 「NoSQL レボリューション」とは、 Google が発表した 2004 年から、Amazon がを発表した 2007 年までの期間を指します。
この期間から出現したのは、2 つの首要なリレーショナルの原則を破棄することで、前例のない速度快、スケーラビリティ、回復力を達成したデータベースのファミリーでした。 2008 年に最开始にリリースされた Cassandra は、この民主革命から生まれました。
Data API は、データベース テクノロジの次の常见な革命史であり、まだ始まったばかりです。データベースの天下の変化は、プログラミング言語やアプリケーション開発の変化より遅れる傾向にあります。したがって、RESTful API はしばらく前から发生し、减少サービス所指アプリケーションのアーキテクチャの先駆けとなってきましたが、データ API がアプリケーション インフラストラクチャの核心な组成部分として明らかになり始めたばかりです。
この红色革命の极为至关重要と、Paul Graham の宣语から 20 年後、データベースの这个世界が開発者の生産性をどのように学习させているかを体谅するために、Stargate 自己的のストーリーを見てみましょう。まず、相护運用性と慣用性というテーマに戻ります。
Stargate: 忠実度の高い、慣用的な開発者エクスペリエンス
Cassandra エコシステムにデータ ゲートウェイが一定要であると鉴别したとき、緊急に Stargate API のオリジナル セットを構築しました。それはモノリシックなアーキテクチャを意味着しました。モノリスは構築が高速公路ですが、常に優れているとは限りません。 Cassandra Query Language (CQL) API、REST API、RESTful ドキュメント API をリリースしました。 GraphQL を追加の API としてすぐに追加しました。近几日まで、Stargate は能够 運用也许 でした。 Stargate のすべては、ネイティブの CQL データ モデルを操作して保护されるため、原則として、多个の API から多个のテーブルをクエリできます。
実際には、誰も実際にこれを行っていないことを学びました。開発者は、指定区域のイディオムに固執します。相护運用性を優先することで、開発者のエクスペリエンスに Cassandra 主義を取り入れ、開発者の生産性を妨げました。 Stargate の元のバージョンでは、開発者が Cassandra の幅の広い表组织形式のデータ構造を认知し、キースペースとパーティションを认知する这个必要があったため、マシンのイディオムに近すぎて、人間のイディオムから離れすぎました。
彼此之间運用性の落とし穴は、目的意义に合わせた組み込みのデザイン积极思考よりも汎用性を優先することです。私たちは、より到底的な表現策略と一样 的な機能を交換して、人間の慣用句に近づき、機械の慣用句から遠ざける、専用の観点から考えることに軸足を移しました。 Cassandra の NoSQL 基盤の利点 (スケール、适用性、パフォーマンス) を維持しながら、忠実度の高い慣用的な開発者エクスペリエンスを给出できるかどうかを考え始めました。
その鍵はデータモデリングにあります。 Cassandra を「データベースの Lisp」に変えるには、Lisp マクロに似た目地を果たすことができるデータ モデルと、開発者がそのデータ モデルと慣用的にやり取りできるようにする Stargate API が用得着でした。アプリケーション開発者の間でデータ構造の很大の互通点である JSON から始め、Stargate 用の JSON API の構築を開始しました。次に、Cassandra で JSON をモデル化する最善の具体方法を見つけなければなりませんでした。
Stargate にはすでに Document API がありますが、Stargate の元の Document API では、 データ モデルを在选择して、JSON ドキュメントを Cassandra テーブルとしてレンダリングしました。このモデルは、1 つのドキュメントを 1 つの Cassandra テーブルの複数の行にマップし、互为運用性を維持します。 CQL を在选择して結果のテーブルをクエリすると、意味着のある結果が返されます。
この元のシュレッディング データ モデルには欠点があります。ドキュメントに関するメタデータは提高されません。たとえば、配列を含むドキュメントの場合、ドキュメントが弄成されると、ドキュメントを全に検査しない限り、配列のサイズについては何もわかりません。さらに关键なことは、インデックス弄成に関する Cassandra の瞩目から逸脱したことです。 Cassandra は行にインデックスを付けますが、ドキュメントを複数の行に消减させたため、ドキュメントのネイティブ Cassandra インデックスを弄成できなくなりました。
Cassandra を JSON に適したストレージ エンジンにするためには、シュレッディングよりも優れた新しいデータ モデルが重要でした。私たちはそれを「スーパーシュレッディング」と呼んだ。スーパー シュレッディングの詳細については、12 月に開催される Aaron Morton ので学ぶことができますが、ここで少しティーザーを紹介します。Cassandra の行ごとに 1 つのドキュメントを格納するために、Cassandra の幅の広い列の性質を借助しています。ドキュメント。
その行には、JSON ドキュメントの標準メタデータ性を释明的に格納するための一連の列もあります。これで、より簡単にインデックス付けできるものと、メタデータを存有および有する具体方法が得られました。
Cassandra への貢献
はい、これらすべてを大規模に機能させるには、Cassandra にいくつかの几乎的な変更が必不可少です。 Apple が Cassandra 5 に貢献している Accord は、よりトランザクション的な的方式でデータ変更を処理するのに役立ちます。 Storage-attached indexing (SAI) と Global Sort は、JSON ドキュメントに対する範囲指定的クエリをより効率的な的方式で処理するのに役立ちます。
Cassandra は静的なソフトウェアではありません。これは活気にあふれ、進化しているオープンソース プロジェクトです。そのため、クライアント側で発生する要件を操作してデータベース側の変更を促進するという Cassandra の長年の伝統も継続しています。ユーザーのニーズにより、Accord、SAI、および Global Sort の建议が促されました。これらは Stargate の JSON API を缓解するだけでなく、Cassandra を缓解します。これは、データ エンジニアとアプリケーション開発者が 2 つの異なるコミュニティではなく、拡大された Cassandra コミュニティの補完的なコホートであることを思い出させてくれます。
そして、JSON は这一のステップにすぎません。几乎的に、Cassandra、Stargate、およびかなり効率的な Cassandra データ モデルから、JSON API を介してやり取りするドキュメント データベースを構築します。スーパーシュレッディングは私たちのマクロです。このアプローチにより、Cassandra はデータベースを做成するためのマシンになります。
このアプローチは、Cassandra 之间の別のデータベースで实用できますか?簡単ではありません。その事由は次のとおりです。 Cassandra に极为有利に働く熱磁学第十二法則の一種のデータベース類似物があります。私たちは、快速路でスケーラブルで回復力のあるものから始めますが、開発者にとってあまり慣用的ではありません。合理性的な効率の制約内で、開発者に表明するより慣用的なインターフェイスと、その速度慢、規模、回復力の有一部电影を交換します。簡単にできないことは、逆趋势に行くことです。非常的に慣用的なものから始めて、それを快速路でスケーラブルで回復力のあるものにする方式 を見つけようとすることは、不能够能なほど困難な作業です。
この熱力学性的机理が、データ API が新しいデータベース变革である情形であり、Cassandra がこの变革を推進するデータベースである情形です。