このデヌタベヌスは燃えおいたす...





技術的な話をしたしょう。



䜕幎も前、私はコラボレヌション機胜が組み蟌たれたアプリケヌションを開発しおいたした。これは、初期のReactずCouchDBの可胜性を最倧限に掻甚した䟿利な実隓スタックでした。JSONOTを介しおリアルタむムでデヌタを同期したした。瀟内で䜿甚されおいたしたが、他の分野での幅広い適甚性ず可胜性は明らかでした。



このテクノロゞヌを朜圚的な顧客に販売しようずしたずきに、予期しない障害に遭遇したした。デモビデオでは、私たちのテクノロゞヌは芋た目も機胜も問題ありたせんでした。ビデオはそれがどのように機胜するかを正確に瀺しおおり、䜕も暡倣されおいたせんでした。プログラムを䜿甚するための珟実的なシナリオを考え出し、コヌディングしたした。



モバむルアプリを介しお察話する2人のナヌザヌ


実際、これが問題になりたした。私たちのデモは、他のすべおの人がアプリケヌションの䜜業をシミュレヌトしたのずたったく同じように機胜したした。具䜓的には、倧きなメディアファむルであっおも、情報はAからBに即座に転送されたした。ログむン埌、各ナヌザヌは新しい゚ントリを芋たした。このアプリケヌションを䜿甚するず、村のどこかでむンタヌネット接続が䞭断された堎合でも、異なるナヌザヌがたったく同じプロゞェクトで共同䜜業を行うこずができたす。これは、AfterEffectsのカット補品ビデオに暗黙的に含たれおいたす。



[曎新]ボタンの目的は誰もが知っおいたしたが、䜜成を䟝頌したWebアプリケヌションには通垞、独自の制限があるこずを誰も理解しおいたせんでした。そしお、それらが䞍芁になった堎合、ナヌザヌ゚クスペリ゚ンスは完党に異なりたす。基本的に、圌らはあなたが察話者にメモを残すこずによっお「チャット」できるこずに気づいたので、圌らはそれが䟋えばスラックずどう違うのか疑問に思いたした。Uf-f-f



日垞の同期蚭蚈



すでに゜フトりェア開発の経隓がある堎合は、ほずんどの人がむンタヌフェむスの写真を芋お、それを操䜜したずきに䜕が行われるかを理解するこずはできないこずを芚えおおく必芁がありたす。プログラム自䜓の内郚で䜕が起こっおいるかは蚀うたでもありたせん。䜕が起こり埗るかを知るこずは、䞻に䜕が起こり埗ず、䜕が起こらないかを知るこずの結果です。これには、゜フトりェアの機胜だけでなく、個々のパヌツがどのように調敎され、盞互に通信するかに぀いおのメンタルモデルが必芁です。



この兞型的な䟋は、spinner.gifを20分間芋おいるナヌザヌです。仕事が最終的にい぀終わるのか疑問に思いたす。開発者は、プロセスがおそらくフリヌズし、gifが画面から消えるこずは決しおないこずを理解するでしょう。このアニメヌションは䜜業の実行をシミュレヌトしたすが、その状態には関連付けられおいたせん。このような堎合、䞀郚の技術者は、ナヌザヌの混乱の皋床に驚いお目を転がすのが奜きです。しかし、それらのどれが回転時蚈を指しおいお、実際には静止しおいるず蚀っおいるかに泚意しおください。



アニメヌションアクティビティスピナヌ


これがリアルタむムの䟡倀の本質です。リアルタむムデヌタベヌスは、最近でもほずんど䜿甚されおおらず、倚くの人がそれらを疑っおいたす。これらのデヌタベヌスのほずんどは、積極的にNoSQLスタむルに傟いおいたす。そのため、通垞、より優れたMongoベヌスの゜リュヌションを䜿甚しおいたす。しかし、私にずっおは、CouchDBでの䜜業の快適さ、および䞀郚の官僚だけでなくデヌタで埋めるこずができる構造の蚭蚈の研究を意味したす。私は自分の時間をよりよく過ごしおいるず思いたす。



しかし、この投皿の本圓のトピックは、私が今日䜿甚しおいるものです。遞択によるのではなく、無関心か぀盲目的に適甚された䌁業ポリシヌのためです。したがっお、密接に関連する2぀のGoogleリアルタむムデヌタベヌス補品の完党に正盎で偏りのない比范を瀺したす。





どちらも名前にFireずいう単語が含たれおいたす。私が愛情を蟌めお芚えおいるこずの1぀。私にずっおの2番目は別の皮類の火です。名前を蚀うのは急いでいたせん。そうするずすぐに、最初の倧きな問題である名前に盎面するからです。



1぀目はFirebaseReal -Time Databaseず呌ばれ、2぀目はFirebase CloudFirestoreです。どちらもGoogleのFirebaseスむヌトの補品です。それらのAPIには、それぞれ、、firebase.database(
)およびずいう名前が付けられおいたすfirebase.firestore(
)。



これは、リアルタむムデヌタベヌスが2014幎にGoogleが賌入する前の元のFirebaseにすぎないためです。その埌、Googleはのコピヌを䜜成するこずにしたした同瀟のビッグデヌタに基づくFirebaseは、クラりドを備えたFirestoreず呌ばれおいたす。ただ混乱しおいないこずを願っおいたす。混乱しおも心配しないでください。私自身、蚘事のこの郚分を10回曞き盎したした。FirebaseはFirebaseの質問で匕甚



する必芁があり、FirestoreはFirebaseの質問で匕甚する必芁があるため、少なくずも数幎前のStackOverflowで理解する必芁がありたす。



゜フトりェア補品の最悪の呜名に察しお賞があった堎合、このケヌスは間違いなく候補の1぀になりたす。これらの名前の間のハミング距離は非垞に小さいため、頭が別の名前を考えおいるにもかかわらず、指が1぀の名前を入力しおいる経隓豊富な゚ンゞニアでさえ混乱したす。これらは惚めに倱敗した蚈画であり、最善の意図を持っお発明されたした。圌らは、デヌタベヌスが燃えるずいう予蚀を果たしたした。そしお、私は冗談ではありたせん。この呜名スキヌムを思い぀いた男は、血、汗、涙を匕き起こしたした。





幜霊の勝利



Firestoreは、次䞖代の子孫であるFirebaseの代わりになるず思われるかもしれたせんが、それは誀解です。FirestoreはFirebaseの代わりにはならないこずが保蚌されおいたす。誰かがそれから面癜いものをすべお切り取っお、残りのほずんどをさたざたな方法で混乱させたようです。



ただし、2぀の補品をざっず芋おみるず、混乱する可胜性がありたす。ほずんど同じAPIを介しお、同じデヌタベヌスセッションでも、同じこずをしおいるように芋えたす。違いは埮劙であり、広範なドキュメントを泚意深く比范しお初めお明らかになりたす。たたは、Firestoreず完党に連携するコヌドをFirebaseに移怍しおFirestoreず連携させようずする堎合。それでも、リアルタむムのドラッグアンドドロップを実行しようずするずすぐにデヌタベヌスむンタヌフェむスが点灯するこずがわかりたす。繰り返したすが、私は冗談ではありたせん。



Firebaseクラむアントは、倉曎をバッファリングし、曎新を自動的に再詊行しお、最埌の曞き蟌みを優先するずいう意味で䞁寧です。ただし、Firestoreには、ドキュメントごず、ナヌザヌごず、1秒あたり1回の曞き蟌み操䜜の制限があり、この制限はサヌバヌによっお課されたす。それを䜿甚するずきは、アプリケヌションを構築しようずしおいる堎合でも、それを回避しおリフレッシュレヌトリミッタヌを実装する方法を自分で芋぀ける必芁がありたす。぀たり、Firestoreは、APIを䜿甚しお停装するリアルタむムクラむアントのないリアルタむムデヌタベヌスです。



これにより、Firestoreの存圚の意味の最初の兆候が芋え始めたす。私は間違っおいるかもしれたせんが、グヌグルのリヌダヌシップの䞊䜍にいる誰かがFirebaseで賌入した埌、「いや、いや、いや。これは受け入れがたい。私のリヌダヌシップの䞋だけではありたせん。」





圌は自分の郚屋から出おきお、



「1぀の倧きなJSONドキュメント番号。デヌタを個別のドキュメントに分割したす。各ドキュメントのサむズは1メガバむト以䞋になりたす。」



そのような制限は、合理的に動機付けられたナヌザヌベヌスずの最初の出䌚いを乗り切るこずはできないようです。あなたはそれがそうであるこずを知っおいたす。たずえば、職堎では1,500を超えるプレれンテヌションがありたすが、これは完党に正垞です。



この制限により、デヌタベヌス内の1぀の「ドキュメント」は、ナヌザヌがドキュメントず呌ぶオブゞェクトのようにはならないずいう事実に同意する必芁がありたす。



「他の芁玠を再垰的に含むこずができる配列の配列番号。配列には、䞻が意図した固定長のオブゞェクトたたは数倀のみが含たれたす。」



したがっお、GeoJSONをFirestoreに配眮するこずを望んでいた堎合、これは䞍可胜であるこずがわかりたす。䞍均䞀なものは蚱可されたせん。 JSON内のBase64および/たたはJSONを気に入っおいただければ幞いです。



「JSONはHTTP、コマンドラむンツヌル、たたは管理パネルを介しおむンポヌトおよび゚クスポヌトしたすか番号。 Google CloudStorageにのみデヌタを゚クスポヌトおよびむンポヌトできたす。だから今呌ばれおいるようです。そしお、私が「あなた」ず蚀うずき、私はプロゞェクトオヌナヌの力を持っおいる人だけを指したす。他の誰もが行っおチケットを䜜成できたす。」



ご芧のずおり、FireBaseデヌタモデルは簡単に説明できたす。これには、JSONキヌをURLパスにリンクする1぀の巚倧なJSONドキュメントが含たれおいたす。FireBaseで次のようHTTP PUTに/蚘述した堎合



{
  "hello": "world"
}


それはGET /hello戻りたす"world"。基本的には、期埅どおりに機胜したす。 FireBaseオブゞェクトのコレクションは、ルヌト/my-collection/:idにあるJSON蟞曞に盞圓し{"my-collection": {...}}、その内容は次の堎所にありたす/my-collection。



{
  "id1": {...object},
  "id2": {...object},
  "id3": {...object},
  // ...
}


これは、各むンサヌトに非衝突IDがある堎合に正垞に機胜したす。これは、システムでのこれに察する暙準的な゜リュヌションです。



蚀い換えるず、デヌタベヌスは100JSON*に準拠しおおり、CouchDBのようなHTTPでうたく機胜したす。ただし、ほずんどの堎合、Web゜ケット、認蚌、およびサブスクリプションを抜象化するリアルタむムAPIを介しお䜿甚したす。管理パネルには䞡方の機胜があり、リアルタむム線集ずJSONむンポヌト/゚クスポヌトの䞡方が可胜です。コヌド内で同じコヌドを䜿甚しおいる堎合、パッチず差分JSONがルヌチンの氞続状態タスクの90を解決するこずに気付くず、カスタムコヌドがどれだけ無駄になっおいるのかに驚かれるこずでしょう。



FirestoreデヌタモデルはJSONに䌌おいたすが、いく぀かの重芁な点で異なりたす。アレむ内にアレむがないこずに぀いおはすでに説明したした。サブコレクションモデルは、含たれおいるJSONドキュメントずは別のファヌストクラスの抂念になりたす。これにはすぐに䜿甚できるシリアル化がないため、デヌタの取埗ず曞き蟌みには専甚のコヌドパスが必芁です。独自のコレクションを凊理するには、スクリプトずツヌルを䜜成する必芁がありたす。管理パネルでは、䞀床に1぀のフィヌルドにのみ小さな倉曎を加えるこずができ、むンポヌト/゚クスポヌト機胜はありたせん。



圌らはリアルタむムのNoSQLデヌタベヌスを取埗し、それを自動結合ず個別の非JSON列を備えた䜎速の非SQLに倉換したした。GraftQLの粟神に基づく䜕か。





ホットゞャバ



Firestoreの信頌性ず拡匵性が向䞊した堎合、皮肉なこずに、平均的な開発者は、FireBaseをそのたた遞択するよりも信頌性の䜎い゜リュヌションを入手できたす。気難しいデヌタベヌス管理者が必芁ずする゜フトりェアは、そのようなレベルの努力ず専門家の胜力を必芁ずするため、補品が優れおいるず思われるニッチにずっおは非珟実的です。これは、開発ツヌルずプレヌダヌがない堎合、HTML5CanvasがFlashの代わりにならない方法ず䌌おいたす。さらに、Firestoreは、デヌタのクリヌン性ず無菌怜蚌の远求に行き詰たっおいたす。これは、平均的なビゞネスナヌザヌが奜む䜜業方法ずはたったく䞀臎しおいたせん。圌にずっお、すべおが最埌たでドラフトであるため、すべおがオプションです。



FireBaseの䞻な欠点は、ほずんどのWeb開発者が䞍倉性に぀いお知る前でさえ、クラむアントが数幎前に䜜成されたこずです。このため、FireBaseは、デヌタを倉曎するこずを想定しおいるため、ナヌザヌが提䟛する䞍倉性を利甚したせん。さらに、ナヌザヌに送信されるスナップショットのデヌタを再利甚しないため、diffがはるかに困難になりたす。倧きなドキュメントの堎合、その可倉のdiffベヌスのトランザクションメカニズムは単に䞍十分です。皆さん、私たちはすでにWeakMapJavaScriptを持っおいたす。快適です。



必芁に応じおデヌタを敎圢し、ツリヌを倧きくしすぎないようにするこずで、この問題を回避できたす。しかし、開発者が䞍倉性ずデヌタベヌス蚭蚈に関する確かで実甚的なアドバむスを組み合わせた非垞に優れたクラむアントAPIを発衚した堎合、FireBaseがはるかに興味深いものになるかどうか興味がありたす。代わりに、圌らは壊れおいないものを修正しようずしたようであり、それはそれを悪化させたした。



Firestoreの䜜成の背埌にあるすべおのロゞックを知りたせん。ブラックボックス内で発生する動機に぀いおの掚論も楜しみの䞀郚です。 2぀の非垞に類䌌しおいるが、比范できないデヌタベヌスのこの䞊眮は非垞にたれです。誰かが考えおいるかのように、「FirebaseはGoogleCloudで゚ミュレヌトできる機胜にすぎたせん」。しかし、実際の芁件を定矩したり、これらの芁件をすべお満たす有甚な゜リュヌションを䜜成したりするずいう抂念はただ発芋されおいたせん。「開発者にそれに぀いお考えさせおください。 UIをきれいにするだけです...もっず火を远加できたすか」



デヌタ構造に぀いおいく぀か理解しおいたす。 「1぀の倧きなJSONツリヌのすべお」の抂念は、デヌタベヌスから倧芏暡な構造の感芚を抜象化する詊みであるこずがはっきりずわかりたす。゜フトりェアが疑わしいデヌタ構造を単玔に凊理するこずを期埅するのはおかしいです。私はすべおがどれほど悪いか想像する必芁さえありたせん、私は厳密なコヌド監査を行い、あなたの人々が倢にも思わなかった䜕かを芋たした。しかし、私はたた、良い構造がどのように芋えるか、それらをどのように䜿甚するか、そしおなぜそれがなされるべきなのか。 Firestoreが論理的に芋え、Firestoreを䜜成した人々が自分たちが良い仕事をしたず思った䞖界を想像するこずができたす。しかし、私たちはこの䞖界に䜏んでいたせん。



FireBaseでク゚リを䜜成するためのサポヌトは、どの暙準でも䞍十分であり、実際には存圚したせん。それは間違いなく改善たたは少なくずも修正が必芁です。ただし、Firestoreは、プレヌンSQLにあるのず同じ1次元むンデックスに制限されおいるため、それほど優れおいたせん。混沌ずしたデヌタを䜿甚しおナヌザヌが実行するク゚リが必芁な堎合は、党文怜玢、耇数の範囲でのフィルタヌ、および任意のナヌザヌ定矩の順序が必芁です。よく調べおみるず、プレヌンSQLの機胜はそれ自䜓では制限されすぎおいたす。たた、人間が本番環境で実行できるSQLク゚リは高速ク゚リだけです。高床なデヌタ構造を備えた特殊なむンデックス䜜成゜リュヌションが必芁になりたす。他のすべおに぀いおは、少なくずもむンクリメンタルmap-reduceたたは同様のものが必芁です。



これに関する情報に぀いおGoogleのドキュメントを芋るず、BigTableやBigQueryのような方向に向けられおいるこずが期埅されたす。ただし、これらの決定にはすべお、倧量の䌁業向け販売の専門甚語が䌎うため、すぐに戻っお別の䜕かを探し始めるこずになりたす。



リアルタむムデヌタベヌスの堎合に最埌に必芁なのは、人間が䜜成したものであり、リヌダヌシップのために絊䞎スケヌルで䜜業しおいる人々のためのものです。



*これは冗談です。100のJSON互換性などはありたせん。






広告



プロゞェクトをデバッグする ためのVDS、開発ず展開のためのサヌバヌをお探しですかあなたは間違いなく私たちのクラむアントです:)さたざたな構成のサヌバヌの毎日の請求、アンチDDoSおよびWindowsラむセンスはすでに料金に含たれおいたす。






All Articles