Quelle est l’attrait des systèmes de bases de données sans schemaless?

J’ai entendu beaucoup parler de systèmes de bases de données sans schéma (souvent dissortingbués) comme MongoDB, CouchDB, SimpleDB, etc.

Bien que je puisse comprendre qu’ils puissent être utiles à certaines fins, dans la plupart de mes applications, j’essaie de conserver des objects ayant un nombre spécifique de champs d’un type spécifique, et je pense simplement au modèle relationnel. Je pense toujours en termes de lignes avec des identifiants entiers uniques, des champs null / non null, des types de données SQL et des requêtes de sélection pour trouver des ensembles.

Bien que je sois attiré par la nature dissortingbuée et les interfaces faciles JSON / RESTful de ces nouveaux systèmes, je ne comprends pas comment les hachages de clé / valeur mal typés m’aideront dans mon développement. Pourquoi un système typé, sans schéma, serait-il approprié pour conserver des ensembles de données propres? Comment puis-je, par exemple, trouver tous les éléments avec des dates comsockets entre x et y alors qu’ils n’ont peut-être pas de dates? Y a-t-il un concept de jointure?

Je comprends que beaucoup de systèmes ont leurs propres différences et forces, mais je me demande quelle différence de paradigme. Je suppose que c’est une question ouverte, mais peut-être que les réponses de la communauté et les manières dont ils ont personnellement vu les avantages de ces systèmes consortingbueront à éclairer moi et d’autres quand je voudrais utiliser ces systèmes le SGBDR traditionnel.

    Je vais juste citer une ou deux raisons communes (je suis sûr que les gens vont écrire des réponses à des essais)

    1. Avec des systèmes hautement dissortingbués, tout dataset donné peut être réparti sur plusieurs serveurs. Lorsque cela se produit, les contraintes relationnelles que le moteur de firebase database peut garantir sont considérablement réduites. Une partie de votre intégrité référentielle devra être gérée dans le code de l’application. Ce faisant, vous découvrirez rapidement plusieurs points critiques:

      • votre logique est répartie sur plusieurs couches (app et db)
      • votre logique est répartie sur plusieurs langues (SQL et la langue de votre choix)

      Le résultat est que la logique est moins encapsulée, moins portable et BEAUCOUP plus coûteux à modifier. De nombreux développeurs se retrouvent à écrire plus de logique dans le code de l’application et moins dans la firebase database. Pris à l’extrême, le schéma de firebase database devient sans object.

    2. La gestion des schémas, en particulier sur les systèmes où les temps d’arrêt ne sont pas une option, est difficile. réduire la complexité du schéma réduit cette difficulté.

    3. ACID ne fonctionne pas très bien pour les systèmes dissortingbués ( BASE , CAP , etc.). Le langage SQL (et le modèle relationnel dans une certaine mesure) est optimisé pour un monde ACID transactionnel. Certaines fonctionnalités du langage SQL et les meilleures pratiques sont donc inutiles, alors que d’autres sont réellement dangereuses. Certains développeurs se sentent mal à l’aise avec “contre-courant” et préfèrent abandonner le SQL entièrement au profit d’un langage conçu à la base pour leurs besoins.

    4. Coût: la plupart des systèmes de SGBDR ne sont pas gratuits. Les leaders de la mise à l’échelle (Oracle, Sybase, SQL Server) sont tous des produits commerciaux. Lorsqu’il s’agit de grands systèmes (à l’échelle du Web), les coûts de licence de firebase database peuvent atteindre ou dépasser les coûts matériels! Les coûts sont suffisamment élevés pour modifier radicalement les considérations relatives à la construction et à l’achat afin de créer une solution personnalisée en plus d’une offre OSS (toutes les offres NOSQL significatives sont OSS)

    La principale préoccupation devrait être ce que vous devez faire avec vos données. Si vous avez un énorme dataset et que vous trouvez un SGBDR traditionnel comme un goulot d’étranglement, vous pouvez essayer une solution sans schémas ou une solution NOSQL .

    La plupart des environnements dont je connais l’utilisation de solutions NOSQL utilisent également une solution de SGBDR sous une forme ou une autre. Les solutions basées sur un SGBDR sont la norme pour laquelle l’intégrité des données est extrêmement importante et vous avez besoin de transactions ACID. Cependant, si votre système n’est pas très basé sur les transactions, mais que vous avez besoin d’une mise à l’échelle ou d’une évolution rapide, une solution NOSQL peut être souhaitable.

    Schemaless est génial pour deux raisons:

    1. Cerveau optimisant l’intuitivité du stockage de documents
    2. Résout les problèmes de stockage Sparse-Masortingx et Entity-Atsortingbute-Value .

    J’ai utilisé à la fois SQL et No-SQL pour les applications de production dans Ruby on Rails. Je ne suis pas un expert en bases de données et je dois avouer que Google et ACID utilisent des termes similaires car ils ne me sont pas familiers.

    “Ah, ah! Un autre adepte de la tendance” savoir-rien “saute dans le dernier train”, direz-vous. Mais, en fait, je suis vraiment satisfait de ma décision d’utiliser MongoDB sur notre application la plus récente de 2 ans et voici pourquoi …

    Le côté positif de l’intuition de l’optimisation du cerveau a été mon expérience du système de commerce électronique Magento. Je ne veux pas le dénigrer parce que cela m’a bien servi à l’époque, mais le processeur a vraiment eu du mal à calculer les atsortingbuts de chaque produit. La raison sous-jacente était le magasin Entity-Atsortingbute-Value des données de produit. Cache ou être damné était la solution.

    L’avantage majeur pour moi est l’optimisation dans le seul endroit qui compte vraiment – votre propre cerveau . Tant de technologies sont critiquées sur leur efficacité en matière de mémoire, de processeurs, de matériel, et pourtant, avoir une firebase database extrêmement intuitive à comprendre apporte ses propres avantages. Nous avons trouvé rapide d’append des fonctionnalités à notre code car la firebase database ressemble simplement au monde réel que nous modélisons. Lorsque j’ai demandé aux clients e-commerce de me présenter leur liste de produits, ils ont naturellement tendance à utiliser Excel (think table store). Les premières colonnes sont faciles:

    1. Nom du produit
    2. Prix
    3. Type de produit (

    Ensuite, il devient plus difficile et couvert de notes, de codes de couleurs et de liens vers d’autres tables (yep .. relations)

    1. Couleur (seulement certains produits)
    2. Taille (X Large, Large, Small) – uniquement pour les produits 8’9’10, les clubs de golf utilisent une autre échelle
    3. Couleur 2. Les colliers de chat ont deux choix de couleur.
    4. Puissance en watts
    5. Type de fixation (mâle, femelle)

    Donc, cela se termine par un terrible gâchis de tableaux Excel qui n’a aucun sens pour moi et pas beaucoup de sens pour les gens qui travaillent avec les produits jour après jour. Nous jetons nos arm en l’air et décidons de parcourir le catalogue et ensuite ça me frappe! Ne serait-ce pas génial de pouvoir stocker les données telles qu’elles apparaissent dans le catalogue? Juste des collections d’enregistrements sur chaque produit qui répertorie simplement l’atsortingbut de ce produit. Vous pouvez ensuite choisir des atsortingbuts communs à indexer pour une récupération ultérieure. Bien sûr, c’est un magasin de documents.

    En résumé, les magasins de documents sont efficaces lorsque vous rencontrez un problème de masortingce fragmentée ou des objects qui modifient leurs atsortingbuts au fil du temps. Ayant vécu dans un monde sans SQL pendant 2 ans, je ne peux pas penser à une application du monde réel qui ne dispose pas de ces fonctionnalités car le monde lui-même ressemble à un magasin de documents.

    J’ai seulement joué avec MongoDB mais une chose qui m’a vraiment intéressé était la façon dont vous pouviez imbriquer des documents. Dans MongoDB, un document est essentiellement un enregistrement. C’est vraiment sympa car traditionnellement, dans un SGBDR, si vous deviez extraire un enregistrement “Personne” et obtenir l’adresse associée, les informations sur l’employeur, etc., vous deviez souvent vous rendre sur plusieurs tables, les joindre, créer plusieurs bases de données. appels. Dans une solution NoSQL telle que MongoDB, vous pouvez simplement imbriquer les enregistrements associés (documents) et ne pas avoir à manipuler les clés étrangères, en rejoignant plusieurs appels de firebase database. Tout ce qui est associé à cet enregistrement est tiré.

    Ceci est particulièrement utile lorsque vous traitez des objects. Vous pouvez dans de nombreux cas simplement stocker un object sous la forme d’une série de documents nesteds.

    Les bases de données NoSQL ne sont pas sans schemaless; le schéma est incorporé dans les données. Ils sont correctement appelés semi-structurés. Dans certains magasins de données KV, cependant, le schéma peut même être incorporé dans le code. L’avantage de l’approche semi-structurée est double: flexibilité dans laquelle les colonnes font partie d’une rangée (une rangée peut avoir 5 colonnes et une autre avoir 5 colonnes différentes et flexibilité dans les caractéristiques des colonnes (par exemple, longueurs variables)).

    Normalement, l’attraction est celle de l’huile de serpent – la plupart des gens qui les privilégient n’ont aucune idée du théorème relationnel et parlent le SQL à un niveau qui fait vomir les professionnels. Aucune idée de ce que sont les conditions ACID, ils sont importants, etc.

    Ne pas dire qu’ils n’ont pas d’utilisations valables … dire simplement que la plupart du temps, les gens ne savent pas ce qu’ils doivent savoir et font des conclusions stupides. Encore une fois, tout le monde n’est pas comme ça, mais la plupart des développeurs qui les favorisent ne comprennent pas bien ce dont un système de firebase database est responsable.