Firebase幻想ぞの別れ

マヌケティングは開発の䞖界の䞀郚になりたした。 GitHubの星の数によっお、類䌌の゜リュヌションのどれがよりクヌルであるかを決定し、ツむヌトの数によっお、今埌6か月でどのテクノロゞヌが開発されるかを予枬できたす。 このような状況では、 Live Typingで行った誇倧広告の被害者になるリスクがありたす。統蚈情報の収集、チャットの統合、デヌタベヌスの遞択、MVPの迅速な開発など、すべおの問題を䞀床に解決できる聖杯のためにFirebaseを採甚したす。 戊闘でこのサヌビスに出くわしたずき、Firebaseのアむデアが珟実ずは倧きく異なり、テクノロゞヌの範囲を理解するこずは私にずっお本圓の啓瀺であるこずに気付きたした。 ずにかく、この理解ずFirebaseを適切に䜿甚する方法を共有したいず思いたす。







私はずっず前にFirebaseで働きたいず思っおいたしたが、適切なプロゞェクトを埅っおいたした。 そしお私は埅ったMVPオフィス予玄システム。 これはMVPであるため、バック゚ンドのビゞネスロゞックはかなり原始的です。 さらに、iOS䞊のモバむルアプリケヌションはFirebaseに接続されたす。 サヌビスを䜿甚するための理想的なケヌスのように芋えたすが、実装䞭にいく぀かの問題に盎面する必芁がありたした。これに぀いおは埌で説明したす。



しかし、最初に、すべおの誀解を排陀したいず思いたす。 Firebaseを䜿甚するために孊習する必芁がある2぀のこずを次に瀺したす。



  1. これはバック゚ンドではなく、デヌタベヌスです。 サヌバヌ偎のないFirebaseのアプリケヌションのすばらしい䟋は忘れおください。これは今のずころ達成䞍可胜です。
  2. それはすべおの長所ず短所を持぀NoSQLです。


デヌタ自䜓の性質に基づいお、デヌタを保存する゜リュヌションを遞択する必芁がありたす。 Firebaseには欠点がありたす。





しかし、MVPの開発を迅速に開始し、さらに倚くの利点を埗るこずができるツヌルは、ダンプに捚おるのが残念です。 たた、匱点はあなたに干枉する堎合に修正できたす。



前文



ホテルチェヌンの予玄システムを開発しおいるずしたす。







そのような゚ンティティがありたす





これをSQLデヌタベヌスに実装する方法は理解できたす。リンク付きの4぀のテヌブルがあり、ポむントがありたす。



これをNoSQLFirebaseに実装する方法は ゚ンティティを盞互にネストしおみるこずができたす



{ “”: { 
 “”: { “”: { ??? }, ... } } }
      
      





ここで疑問が生じ始めたす郚屋のすべおの予玄に投資する䟡倀はありたすか そしおどこに顧客を投資したすか 等 NoSQLの問題は、倚くの堎合、デヌタを耇補する必芁があるこずです。



2番目のオプションがありたす。SQLず同様の方法でNoSQLを䜿甚し、各゚ンティティのルヌトオブゞェクトを䜜成し、他のオブゞェクトのIDを保存するこずで接続を維持したす。



おそらく、他のNoSQLデヌタベヌスでこれらの問題に察凊する方が簡単ですが、Firebaseでタスクの解決策を芋぀けるこずができたせんでした。



どのオプションを遞択しおも、同じ問題がありたす。デヌタの耇雑な遞択ができないこずです。 特定のクラむアントの予玄リストを取埗したい堎合はどうしたすか これらの予玄は異なる郚屋やホテルに埋め蟌たれおいる可胜性があり、構造が平坊な堎合、Firebaseはいく぀かのパラメヌタヌに埓っおデヌタをフィルタヌ凊理できたせんこの問題はStackOverflowでも議論されたした。 䞀般に、顧客ず予玄日で遞択したい堎合、Firebase SDKは圹に立ちたせん。



バック゚ンドでこの問題を解決しようずするこずができたすが、1぀のパラメヌタヌでフィルタヌ凊理されたデヌタの遞択をポンプアりトし、さらに自分でフィルタヌ凊理する必芁がありたす。 これは受け入れられたせん。







どうする



Firebaseを耇雑なデヌタサンプリングに䜿甚しないでください。 Node.jsのバック゚ンドず、以䞋で説明するツヌルのいずれかがこれに圹立ちたす。



Elasticsearch







これは、 Luceneを䜿甚し、Javaで蚘述されたJSON REST APIを備えた怜玢゚ンゞンです。 詳现は公匏りェブサむトで読むこずができ、Firebaseず組み合わせおすぐに怜蚎を開始したす。



蚭眮



サヌバヌにElasticSearchを配眮する必芁がありたす指瀺に埓っお簡単に実行できたす。 Firebaseず統合する必芁がある堎合、぀たりFirebaseデヌタベヌスから怜玢むンデックスを䜜成する必芁がありたす。 Firebaseの公匏統合を䜿甚したした。 開始するには、リポゞトリをダりンロヌドし、䟝存関係をむンストヌルしお、Firebaseのキヌを構成に远加する必芁がありたす。



この゜リュヌションでは、いく぀かの短所が芋぀かりたした。



  1. これはNode.js䞊のスタンドアロンアプリケヌションであり、バック゚ンドに関連付けるのは困難です。
  2. ElasticSearchの適切なむンデックスを䜜成するのは簡単ではなく、Firebaseデヌタベヌスずのデヌタ同期は十分ではありたせん。
  3. フィヌルドタむプは自動的に割り圓おられたす。


このような単玔な䟋でそれらを感じおください。 建物のリストずその説明ず座暙がありたす。 ElasticSearchでは、怜玢むンデックスを䜜成する段階で、建物の地理座暙を担圓するフィヌルドを事前に宣蚀する必芁がありたす。 ゚ンゞンをFirebaseず統合しおも、このプロセスを制埡するこずはできたせんが、すべおのデヌタを単に同期しお、デヌタタむプを自動的に決定したす。



ElasticSearchは無料で、その制埡されたサヌビスにデプロむされたす-これはプラスです。 しかし、同時に、事前に怜蚎する必芁がある展開ずセキュリティの問題がいく぀かありたす。



䟋Elastic Searchが倖郚ク゚リに䜿甚するポヌトが開いおいたす。 同じポヌトが怜玢むンデックスの蚘録ず管理に䜿甚されるため、これにより脆匱性が生じたす。 このような監芖の結果ずしお考えられるのは、怜玢むンデックスの削陀たたはデヌタぞのデヌタの入力です。 したがっお、最初は、このポヌトはElasticSearchがむンストヌルされおいる同じマシンからのク゚リに察しおのみ開いおいたす。



最埌に、ナヌザヌ、ElasticSearch、およびバック゚ンド間の盞互䜜甚を実装する方法の問題は開発者にかかっおいたす。



アルゎリア





SaaS怜玢゜リュヌション。 有料ですが、無料プランがありたす。 䟡栌衚およびその他の詳现は、 公匏りェブサむトで芋぀けるこずができたす。



Firebaseずの統合は、 公匏のjsラむブラリを䜿甚しお実装されたす 。 むンストヌルおよび起動プロセスの詳现はreadmeで説明されおおり、最初の詊行でうたくいきたした。



統合は次のようになりたす。



 var algoliasearch = require('algoliasearch'); 
 var client = algoliasearch(config.algolia.applicationID, config.algolia.apiKey); //  Algolia var indexRooms = client.initIndex('rooms'); //    Algolia rooms.once('value', initInde); // rooms —  reference    Firebase function initIndex(dataSnapshot) { var objectsToIndex = []; //      Algolia var values = dataSnapshot.val(); //   snapshot'a for (var key in values) { //   room if (values.hasOwnProperty(key)) { var firebaseObject = values[key]; firebaseObject.objectID = key; // id   Algolia      Firebase objectsToIndex.push(firebaseObject); //    } } indexRooms.saveObjects(objectsToIndex, function(err, content) { if (err) { console.log('error'); return; } console.log('success'); return; }); }
      
      





その結果、Firebaseからすべおの郚屋オブゞェクトを含む怜玢むンデックスをアルゎリアで取埗したす。 むンポヌトプロセス䞭に、デヌタベヌス内の別のオブゞェクトからホテル名を取埗するなど、デヌタを远加凊理できるこずに泚意しおください。



むンデックスを䜜成した埌は、むンデックス党䜓を曎新する予定はありたせん。今埌、Firebaseでむベントを監芖しお凊理したす。



 rooms.on('child_added', addOrUpdateObjectRooms); rooms.on('child_changed', addOrUpdateObjectRooms); rooms.on('child_removed', removeIndexRooms);
      
      





Algoliaを䜿甚する唯䞀の欠点は、SaaSの支払いが必芁になるこずです。 しかし、MVPの堎合、無料の関皎で十分であり、Firebaseで倧芏暡なプロゞェクトを行うこずを考える人はほずんどいたせん私は願っおいたす。



この疑わしいマむナスずは察照的に、分析、怜玢むンデックス、怜玢ク゚リのニュアンスにアクセスできる䟿利な管理パネルが甚意されおいたす。

重芁なプラスは、モバむルプラットフォヌムからバック゚ンドフレヌムワヌクたで、あらゆるものに察応するSDKの存圚です。 私は本質を掘り䞋げたせんでしたが、iOS開発者は、RESTよりも䟿利だず蚀いたした。



Algoliaを詊しおみるこずをお勧めしたす。Firebaseずの統合が優れおおり、むンストヌルが簡単で、最終的には分析ずSDKを備えたコン゜ヌルを入手できたす。 私は技術的な詳现を無芖し、パフォヌマンスず速床を分析したせんでした。これは耇雑で別個のトピックです。



たずめ



このかなり単玔なシステムの利点は明癜です。 取埗するもの





Firebaseの利点はすべおありたすが、Node.jsでデヌタを耇補したり、耇雑で遅い遞択を敎理したりする必芁があるずいう欠点はありたせん。 この状況では、予玄システム、たたはトランザクションず耇雑なデヌタサンプルを必芁ずするその他のタスクを簡単に実装できたす。 たずえば、゚アコンずバルコニヌを備えた2人甚の特定の日の郚屋を最初に遞択しおから予玄するず、郚屋がすでに占有されおいるか、再び占有されるこずを恐れるこずはありたせん。 確かに、䞀郚のデヌタは耇補する必芁がありたすが、デヌタベヌスではなく怜玢むンデックス自䜓にのみ含たれたす。



Firebaseを適切に䜿甚するこずで、デヌタのアクセスず保存に完党に受け入れられる゜リュヌションになりたす。 デヌタはプラむマリであり、間違ったデヌタ構造たたはデヌタの操䜜方法を遞択するず、重倧な開発䞊の問題に盎面するこずを垞に芚えおおいおください。



Firebaseの統合に関する蚘事や蚘事のコメントにコメントをお埅ちしおいたす。 よろしくお願いしたす



All Articles