
Permettez-moi de vous raconter une histoire technique.
Il y a de nombreuses années, j'ai développé une application avec des fonctionnalités de collaboration intégrées. C'était une pile expérimentale pratique, exploitant pleinement le potentiel du premier React et de CouchDB. Elle synchronisait les données en temps réel via JSON. . Elle était utilisée pour le travail interne de l'entreprise, mais son applicabilité et son potentiel dans d'autres domaines étaient évidents.
En essayant de vendre cette technologie à des clients potentiels, nous avons rencontré un obstacle inattendu. Dans la vidéo de démonstration, notre technologie avait l'air et fonctionnait parfaitement, il n'y avait aucun problÚme. La vidéo montrait exactement comment cela fonctionne, sans aucune simulation. Nous avons conçu et codé un scénario d'application réaliste pour le programme.

En rĂ©alitĂ©, cela a Ă©tĂ© le problĂšme. Notre dĂ©mo fonctionnait exactement comme l'imitation de l'utilisation de leurs applications par tous les autres. Plus prĂ©cisĂ©ment, les informations Ă©taient transmises instantanĂ©ment de A Ă B, mĂȘme s'il s'agissait de gros fichiers multimĂ©dias. AprĂšs connexion, chaque utilisateur voyait de nouvelles entrĂ©es. GrĂące Ă l'application, diffĂ©rents utilisateurs pouvaient collaborer clairement sur les mĂȘmes projets, mĂȘme en cas d'interruption de la connexion Internet quelque part dans un village. Cela Ă©tait implicitement sous-entendu dans n'importe quelle vidĂ©o dĂ©coupĂ©e dans After Effects sur le produit.
Bien que tout le monde sache à quoi sert le bouton de rafraßchissement, personne ne comprenait vraiment que les applications Web, que l'on nous demande de créer, sont souvent sujettes à leurs limitations. Et que si elles ne sont plus nécessaires, l'expérience utilisateur sera totalement différente. En général, ils remarquaient qu'il était possible de « discuter », en laissant des notes à leurs interlocuteurs, se posant donc la question de la différence avec, par exemple, Slack. Ouf !
Le design des synchronisations quotidiennes
Si vous avez dĂ©jĂ de l'expĂ©rience dans le dĂ©veloppement de logiciels, vous devez trouver frustrant de devoir se rappeler que la plupart des gens ne peuvent pas simplement regarder une image de l'interface et comprendre ce qu'elle fera lors de l'interaction avec elle. Sans parler de ce qui se passe Ă l'intĂ©rieur du programme lui-mĂȘme. Savoir ce qui peut doit se produire est en grande partie le rĂ©sultat de la connaissance de ce qui ne peut pas se produire et ce qui ne doit pas se produire. Cela nĂ©cessite non seulement ce que fait le logiciel, mais aussi la façon dont ses diffĂ©rentes parties sont alignĂ©es et communiquent entre elles.
Un exemple classique de cela est un utilisateur regardant pendant vingt minutes spinner.gif, se demandant quand le travail prendra enfin fin. Le développeur comprendrait que le processus est probablement gelé, et que le GIF ne disparaßtra jamais de l'écran. Cette animation simule l'exécution d'une tùche, mais n'est pas liée à son état. Dans de tels cas, certains techniciens aiment lever les yeux au ciel, s'interrogeant sur le degré d'illusion des utilisateurs. Mais remarquez, qui parmi eux pointe sur l'horloge tournante et dit qu'elle est en réalité immobile ?

C'est lĂ que rĂ©side la valeur du temps rĂ©el. De nos jours, les bases de donnĂ©es en temps rĂ©el sont encore trĂšs peu utilisĂ©es, et beaucoup s'en mĂ©fient. La plupart de ces bases de donnĂ©es tendent vers un style NoSQL, ce qui amĂšne souvent Ă utiliser des solutions basĂ©es sur Mongo, qu'il vaut mieux oublier. Pour moi, cela signifie le confort de travailler avec CouchDB, ainsi que l'exploration de la conception de structures capables d'ĂȘtre remplies de donnĂ©es par autre chose qu'un bureaucrate. Je pense que je gĂšre mon temps de maniĂšre plus optimale.
Mais le vĂ©ritable sujet de ce post est ce que j'utilise aujourd'hui. Non pas par choix, mais en raison d'une politique d'entreprise appliquĂ©e de maniĂšre indiffĂ©rente et aveugle. Par consĂ©quent, je vais fournir une comparaison totalement honnĂȘte et impartiale de deux produits Ă©troitement liĂ©s pour travailler avec des bases de donnĂ©es en temps rĂ©el de Google.

Les deux ont le mot Fire dans leur nom. L'un je me souviens avec tendresse. L'autre pour moi est un autre type de feu. Je ne me dĂ©pĂȘche pas de dire leurs noms, car une fois que je le ferai, nous serons confrontĂ©s au premier grand problĂšme : les noms.
Le premier s'appelle Firebase Real-Time Database, et le second â Firebase Cloud Firestore. Tous deux sont des produits de la suite Firebase de Google. Leurs API s'appellent, respectivement, firebase.database(âŠ) et firebase.firestore(âŠ).
Cela s'est produit parce que Real-Time Database Ă©tait simplement l'original Firebase avant son acquisition par Google en 2014. Ensuite, chez Google, ils ont dĂ©cidĂ© de crĂ©er un produit parallĂšle sous la forme d'une copie de Firebase basĂ© sur les big data de l'entreprise, et l'ont nommĂ© Firestore with a cloud. J'espĂšre que vous ne vous ĂȘtes pas encore perdu. Si vous ĂȘtes perdu, ne vous inquiĂ©tez pas, j'ai moi-mĂȘme réécrit cette partie de l'article dix fois.
Parce qu'il faut préciser Firebase en ce qui concerne Firebase, et Firestore en ce qui concerne Firebase, du moins pour que vous soyez compris il y a quelques années sur Stack Overflow.
S'il existait un prix pour le pire nommage de produits logiciels, ce cas serait certainement un des prĂ©tendants. La distance de Hamming entre ces noms est si faible qu'elle perturbe mĂȘme des ingĂ©nieurs expĂ©rimentĂ©s dont les doigts tapent un nom alors que leur tĂȘte pense Ă un autre. Ce sont des plans qui ont Ă©chouĂ© avec fracas, conçus avec les meilleures intentions ; ils ont rĂ©alisĂ© la prophĂ©tie selon laquelle la base de donnĂ©es serait en feu. Et je ne rigole pas. La personne qui a conçu un tel schĂ©ma de nommage a Ă©tĂ© Ă l'origine de sang, de sueur et de larmes.

Une victoire Ă la Pyrrhus
On pourrait penser que Firestore est le remplacement de Firebase, son descendant de nouvelle génération, mais ce serait une erreur. Firestore n'est absolument pas destiné à remplacer Firebase. On dirait que quelqu'un a retiré tout ce qui était intéressant, et la majeure partie du reste a été compliquée de différentes maniÚres.
Cependant, un coup d'Ćil rapide aux deux produits peut vous induire en erreur : ils semblent faire la mĂȘme chose, via principalement des API identiques et mĂȘme dans la mĂȘme session de base de donnĂ©es. Les diffĂ©rences sont peu visibles et ne se dĂ©voilent qu'Ă travers une Ă©tude comparative minutieuse de la documentation dĂ©taillĂ©e. Ou lorsque vous essayez de porter un code qui fonctionne parfaitement sur Firebase pour qu'il fonctionne avec Firestore. MĂȘme alors, vous dĂ©couvrirez que l'interface de la base de donnĂ©es s'enflamme dĂšs que vous essayez de faire glisser la souris en temps rĂ©el. Je le rĂ©pĂšte, je ne rigole pas.
Le client Firebase est poli dans le sens oĂč il met en mĂ©moire tampon les modifications et effectue automatiquement des tentatives de mise Ă jour, en donnant la prioritĂ© Ă la derniĂšre opĂ©ration d'Ă©criture. Cependant, Firestore a une limite de 1 opĂ©ration d'Ă©criture par document par utilisateur par seconde, et cette limite est imposĂ©e par le serveur. En travaillant avec, vous devez vous-mĂȘme trouver un moyen de contourner cela et mettre en Ćuvre une limitation de frĂ©quence des mises Ă jour, mĂȘme lorsque vous essayez simplement de crĂ©er votre application. Autrement dit, Firestore est une base de donnĂ©es en temps rĂ©el sans client en temps rĂ©el, qui se camoufle en tant que telle grĂące Ă l'API.
C'est ici que nous commençons Ă voir les premiers signes de la raison d'ĂȘtre de Firestore. Peut-ĂȘtre que je me trompe, mais je soupçonne que quelqu'un en haut de la direction de Google a regardĂ© Firebase aprĂšs son acquisition et a simplement dit : « Non, mon Dieu, non. C'est inacceptable. Pas sous ma direction ».

Il est sorti de ses appartements et a proclamé :
« Un gros document JSON ? Non. Vous devez diviser les données en documents séparés, chacun d'une taille maximale d'un mégaoctet ».
Il semble qu'une telle restriction ne survivra pas au premier affrontement avec une base d'utilisateurs suffisamment motivée. Vous le savez. Au travail, par exemple, nous avons plus de mille cinq cents présentations, et c'est tout à fait normal.
Avec une telle restriction, vous serez contraint d'accepter le fait qu'un « document » dans la base de données ne ressemblera à aucun objet que l'utilisateur pourrait désigner comme document.
« Des tableaux de tableaux, qui peuvent récursivement contenir d'autres éléments ? Non. Les tableaux ne contiendront que des objets ou des nombres de longueur fixe, comme le veut le Seigneur ».
Donc, si vous espériez inclure votre GeoJSON dans Firestore, vous découvrirez que c'est impossible. Rien de non unidimensionnel n'est autorisé. J'espÚre que vous aimez Base64 et/ou JSON à l'intérieur de JSON.
« Importer et exporter JSON par HTTP, outils en ligne de commande ou tableau de bord d'administration ? Non. Vous ne pourrez qu'exporter et importer des données dans Google Cloud Storage. Ainsi, ça s'appelle maintenant. Et quand je dis « vous », je m'adresse uniquement à ceux qui ont les droits de Project Owner. Tous les autres peuvent aller créer des tickets. »
Comme vous pouvez le voir, le modÚle de données FireBase est facile à décrire. Il contient un énorme document JSON, liant des clés JSON à des chemins d'URL. Si vous écrivez avec HTTP PUT dans / FireBase le suivant :
{
"hello": "world"
} Alors GET /hello renverra "world". En gros, cela fonctionne exactement comme vous vous y attendez. La collection d'objets FireBase /my-collection/:id équivaut à un dictionnaire JSON {"my-collection": {...}} à la racine, dont le contenu est accessible à /my-collection:
{
"id1": {...object},
"id2": {...object},
"id3": {...object},
// ...
}Cela fonctionne trÚs bien si chaque insertion a un ID sans collision, pour ce à quoi le systÚme a une solution intégrée.
En d'autres termes, la base de données est 100 % compatible avec JSON (*) et fonctionne parfaitement avec HTTP, par exemple avec CouchDB. Mais principalement, vous l'utilisez via une API en temps réel, qui abstrait les websockets, l'autorisation et les abonnements. Le panneau d'administration offre les deux options, permettant d'éditer en temps réel et d'importer/exporter du JSON. Si vous suivez cela dans votre code, vous serez surpris de voir combien de code spécialisé disparaßtra lorsque vous comprendrez que patch et diff JSON permettent de résoudre 90 % des tùches répétitives liées à la gestion d'état persistant.
Le modĂšle de donnĂ©es Firestore ressemble Ă JSON, mais se diffĂ©rencie sur certains aspects critiques. J'ai dĂ©jĂ mentionnĂ© l'absence de tableaux Ă l'intĂ©rieur de tableaux. Le principe des sous-collections est qu'elles sont des concepts de premier ordre, distincts du document JSON qui les contient. Comme il n'existe pas de sĂ©rialisation prĂȘte Ă l'emploi pour cela, l'obtention et l'Ă©criture de donnĂ©es nĂ©cessitent un chemin d'exĂ©cution de code spĂ©cialisĂ©. Pour gĂ©rer vos propres collections, vous devez Ă©crire vos propres scripts et outils. Le panneau d'administration ne permet d'apporter que de petites modifications, champ par champ, et n'a pas de fonctionnalitĂ©s d'import/export.
Ils ont pris une base de données NoSQL en temps réel et l'ont transformée en une solution SQL lente avec auto-fusion et une colonne distincte non-JSON. Un peu comme GraftQL.

Java chaud
Si Firestore devait devenir plus fiable et Ă©volutif, l'ironie est que le dĂ©veloppeur moyen obtiendra une solution moins fiable que s'il choisissait FireBase « clĂ© en main ». Le logiciel dont a besoin le Administrateur de Base de DonnĂ©es Grognon nĂ©cessite un niveau d'efforts et un calibre de spĂ©cialistes qui sont simplement irrĂ©alistes pour le marchĂ© oĂč un bon produit est censĂ© ĂȘtre prĂ©sent. C'est comme si le Canvas HTML5 n'Ă©tait pas du tout un remplacement de Flash, s'il n'existe pas d'outils de dĂ©veloppement et de lecteurs. De plus, Firestore est embourbĂ©e dans la quĂȘte de puretĂ© des donnĂ©es et de validation stĂ©rile, ce qui ne correspond tout simplement pas Ă la maniĂšre dont un utilisateur commercial moyen aime travailler: car pour lui, rien n'est obligatoire, car jusqu'Ă la fin, tout n'est qu'un brouillon.
Le principal inconvénient de FireBase est que le client a été créé plusieurs années avant son calendrier, bien avant que la plupart des développeurs web n'aient connaissance de l'immuabilité. En conséquence, FireBase suppose que vous allez modifier les données et ne tire donc pas parti de l'immuabilité fournie par l'utilisateur. De plus, il ne réutilise pas les données dans les instantanés transmis à l'utilisateur, rendant ainsi l'exécution des différences beaucoup plus difficile. Pour de gros documents, son mécanisme de transaction basé sur des différences modifiables est simplement inadéquat. Les gars, nous avons déjà WeakMap en JavaScript. C'est pratique.
Si vous donnez aux données la forme appropriée et que vous ne rendez pas les arbres trop volumineux, vous pouvez contourner ce problÚme. Mais je me demande si FireBase serait beaucoup plus intéressant si les développeurs avaient publié une véritable bonne API client exploitant l'immuabilité, associée à de solides conseils pratiques sur la structure des bases de données. Au lieu de cela, ils semblent avoir essayé de réparer ce qui n'est pas cassé, et cela a empiré.
Je ne connais pas toute la logique qui a sous-tendu la crĂ©ation de Firestore. RĂ©flĂ©chir aux motivations se trouvant Ă l'intĂ©rieur d'une boĂźte noire fait aussi partie du divertissement. Une telle opposition entre deux bases de donnĂ©es extrĂȘmement similaires, mais incomparables, est assez rare. C'est comme si quelqu'un avait pensĂ© : «Firebase est simplement une fonction que nous pouvons Ă©muler dans Google Cloud», mais sans encore avoir dĂ©couvert le concept de dĂ©finition des exigences du monde rĂ©el ou de crĂ©ation de solutions utiles rĂ©pondant Ă toutes ces exigences. «Laissez cela aux dĂ©veloppeurs. Rendre simplement l'interface utilisateur attrayante⊠Peut-on ajouter un peu plus de flair ?»
Je comprends quelques notions sur les structures de donnĂ©es. Je vois clairement que le concept de «tout dans un grand arbre JSON» est une tentative d'abstraire de la base de donnĂ©es toute sensation de structure Ă grande Ă©chelle. S'attendre Ă ce que le logiciel gĂšre simplement n'importe quel fractal douteux de structure de donnĂ©es est tout simplement insensĂ©. Je n'ai mĂȘme pas besoin d'imaginer Ă quel point cela peut ĂȘtre mauvais, j'ai effectuĂ© des audits de code rigoureux et j'ai vu des choses auxquelles vous, les gens, n'avez mĂȘme pas pensĂ©.. Mais je sais aussi Ă quoi ressemblent de bonnes structures, et Je peux imaginer un monde oĂč Firestore semblerait tout Ă fait logique, et oĂč les personnes qui l'ont créée penseraient avoir fait du bon travail. Mais nous ne vivons pas dans ce monde.
Le support de la construction de requĂȘtes dans FireBase est mĂ©diocre selon n'importe quelle norme, il est pratiquement inexistant. Il nĂ©cessite clairement des amĂ©liorations, ou au moins une rĂ©vision. Mais Firestore n'est pas beaucoup mieux, car il est limitĂ© par les mĂȘmes index unidimensionnels que l'on trouve dans un simple SQL. Si vous avez besoin de requĂȘtes que les gens effectuent avec des donnĂ©es chaotiques, vous aurez besoin d'une recherche textuelle complĂšte, de filtres sur plusieurs plages et d'un ordre dĂ©fini par l'utilisateur alĂ©atoirement. En examinant de prĂšs les fonctions du simple SQL, elles sont en soi trop limitĂ©es. De plus, les seules requĂȘtes SQL que les gens peuvent exĂ©cuter en production sont des requĂȘtes rapides. Vous aurez besoin d'une solution spĂ©cialisĂ©e pour l'indexation avec des structures de donnĂ©es rĂ©flĂ©chies. Pour tout le reste, il doit au moins y avoir un map-reduce incrĂ©mental ou quelque chose de similaire.
Si vous recherchez des informations à ce sujet dans la documentation de Google, espérons que cela vous orientera vers quelque chose comme BigTable et BigQuery. Cependant, toutes ces solutions s'accompagnent d'un volume de jargon dense lié aux ventes d'entreprise, si bien que vous revenez rapidement en arriÚre et recommencez à chercher autre chose.
La derniÚre chose dont vous avez besoin dans une base de données en temps réel, c'est quelque chose créé par des humains et pour des humains, fonctionnant à l'échelle des salaires pour des cadres.
(*) C'est une blague, il n'existe pas de concept tel que .
En tant que publicité
Vous cherchez un serveur pour le dĂ©veloppement et l'hĂ©bergement de projets ? Vous ĂȘtes exactement notre client đ La tarification journaliĂšre des serveurs de diffĂ©rentes configurations, anti-DDoS et licences Windows sont dĂ©jĂ incluses dans le prix.
Source : habr.com
