Bonjour, amis. Avant de partir pour la deuxiÚme partie des vacances de mai, nous partageons avec vous un document que nous avons traduit en prévision du lancement d'un nouveau cours. .

Les développeurs d'applications passent beaucoup de temps à comparer plusieurs bases de données opérationnelles afin de choisir celle qui conviendra le mieux à la charge de travail prévue. Les besoins peuvent inclure une modélisation des données simplifiée, des garanties transactionnelles, des performances de lecture/écriture, une mise à l'échelle horizontale et une résilience en cas de panne. Traditionnellement, le choix commence par la catégorie de la base de données, SQL ou NoSQL, car chaque catégorie offre un ensemble clair de compromis. Une haute performance en termes de faible latence et de grande capacité est généralement considérée comme une exigence non négociable, et donc nécessaire pour toute base de données sélectionnée.
L'objectif de cet article est d'aider les dĂ©veloppeurs d'applications Ă faire le bon choix entre SQL et NoSQL dans le contexte de la modĂ©lisation des donnĂ©es de l'application. Nous examinerons une base de donnĂ©es SQL, Ă savoir PostgreSQL, et deux bases de donnĂ©es NoSQL â Cassandra et MongoDB, afin de discuter des principes de conception des bases de donnĂ©es, tels que la crĂ©ation de tables, leur remplissage, la lecture des donnĂ©es d'une table et leur suppression. Dans le prochain article, nous aborderons certainement les index, les transactions, les JOIN, les directives TTL et la conception des bases de donnĂ©es basĂ©es sur JSON.
Quelle est la différence entre SQL et NoSQL ?
Les bases de données SQL augmentent la flexibilité de l'application grùce aux garanties transactionnelles ACID, ainsi qu'à leur capacité à interroger des données avec des JOIN de maniÚres inattendues sur des modÚles normalisés existants de bases de données relationnelles.
Ătant donnĂ© leur architecture monolithique/Ă nĆud unique et leur utilisation du modĂšle de rĂ©plication maĂźtre-esclave pour la redondance, les bases de donnĂ©es SQL traditionnelles manquent de deux caractĂ©ristiques importantes : la scalabilitĂ© linĂ©aire des Ă©critures (c'est-Ă -dire la sĂ©paration automatique sur plusieurs nĆuds) et la perte automatique/nulle de donnĂ©es. Cela signifie que le volume des donnĂ©es obtenues ne peut pas dĂ©passer le maximum de dĂ©bit d'Ă©criture d'un nĆud. De plus, une certaine perte de donnĂ©es dans le temps doit ĂȘtre prise en compte pour la tolĂ©rance aux pannes (dans une architecture sans sĂ©paration des ressources). Il est important de noter que les derniers commits ne se reflĂštent pas encore dans la copie esclave. Les mises Ă jour sans temps d'arrĂȘt sont Ă©galement difficiles Ă rĂ©aliser dans les bases de donnĂ©es SQL.
Les bases de donnĂ©es NoSQL sont gĂ©nĂ©ralement distribuĂ©es par nature, c'est-Ă -dire que les donnĂ©es sont divisĂ©es en sections et rĂ©parties sur plusieurs nĆuds. Elles nĂ©cessitent une dĂ©normalisation. Cela signifie que les donnĂ©es saisies doivent Ă©galement ĂȘtre copiĂ©es plusieurs fois pour rĂ©pondre aux requĂȘtes spĂ©cifiques que vous envoyez. L'objectif principal est d'obtenir une haute performance en rĂ©duisant le nombre de shards disponibles lors de la lecture. Cela implique que NoSQL vous oblige Ă modĂ©liser vos requĂȘtes, tandis que SQL vous oblige Ă modĂ©liser vos donnĂ©es.
NoSQL met l'accent sur l'atteinte d'une haute performance dans un cluster distribué, ce qui justifie de nombreux compromis dans la conception des bases de données, y compris la perte de garanties de transaction ACID, les jointures et les index secondaires globaux cohérents.
Il existe une opinion selon laquelle, bien que les bases de données NoSQL offrent une scalabilité linéaire des écritures et une haute tolérance aux pannes, la perte de garanties transactionnelles les rend inadaptées aux données critiques.
Le tableau suivant montre comment la modélisation des données dans NoSQL diffÚre de celle dans SQL.

SQL et NoSQL : Pourquoi les deux sont-ils nécessaires ?
Des applications réelles avec un grand nombre d'utilisateurs, telles qu'Amazon.com, Netflix, Uber et Airbnb, ont pour tùche l'exécution de processus complexes et variés. Par exemple, une application de commerce électronique comme Amazon.com doit stocker des données légÚres et trÚs critiques, telles que des informations sur les utilisateurs, les produits, les commandes, les factures, ainsi que des données volumineuses mais moins sensibles, telles que les avis sur les produits, les messages du service client, l'activité des utilisateurs, les commentaires et les recommandations des utilisateurs. Naturellement, ces applications s'appuient au moins sur une base de données SQL, ainsi que sur au moins une base de données NoSQL. Dans les systÚmes interrégionaux et globaux, la base de données NoSQL fonctionne comme un cache géodistribué pour les données stockées dans une source de confiance, une base de données SQL opérant dans une seule région.
Comment YugaByte DB combine-t-il SQL et NoSQL ?
Construite sur un moteur de stockage hybride orientĂ© journal, avec un auto-sharding, une rĂ©plication de consensus distribuĂ©e par sharding et des transactions ACID distribuĂ©es (inspirĂ©es de Google Spanner), YugaByte DB est la premiĂšre base de donnĂ©es open source au monde Ă ĂȘtre compatible Ă la fois avec NoSQL (Cassandra & Redis) et SQL (PostgreSQL). Comme le montre le tableau ci-dessous, YCQL, l'API de YugaByte DB compatible avec Cassandra, ajoute le concept de transactions ACID Ă clĂ© unique et multiclĂ©e ainsi que des index secondaires globaux Ă l'API NoSQL, ouvrant ainsi l'Ăšre des bases de donnĂ©es NoSQL transactionnelles. De plus, YCQL, l'API de YugaByte DB compatible avec PostgreSQL, ajoute les notions d'Ă©volutivitĂ© linĂ©aire des Ă©critures et de tolĂ©rance aux pannes automatique Ă l'API SQL, rĂ©vĂ©lant ainsi au monde les bases de donnĂ©es SQL distribuĂ©es. Ătant donnĂ© que la base de donnĂ©es YugaByte DB est essentiellement transactionnelle, l'API NoSQL peut maintenant ĂȘtre utilisĂ©e dans le contexte de donnĂ©es critiques.

Comme mentionné précédemment dans l'article , le choix entre SQL ou NoSQL dans YugaByte DB dépend entiÚrement des caractéristiques de la charge de travail principale :
- Si la charge de travail principale implique des opĂ©rations multiclĂ©s avec des JOIN, alors en choisissant YSQL, gardez Ă l'esprit que vos clĂ©s peuvent ĂȘtre rĂ©parties sur plusieurs nĆuds, ce qui entraĂźnera une latence plus Ă©levĂ©e et/ou une baisse de la bande passante par rapport Ă NoSQL.
- Sinon, choisissez l'une des deux API NoSQL, en gardant Ă l'esprit que vous obtiendrez de meilleures performances grĂące aux requĂȘtes gĂ©rĂ©es par un seul nĆud Ă la fois. YugaByte DB peut servir de base de donnĂ©es opĂ©rationnelle unique pour des applications rĂ©elles complexes nĂ©cessitant la gestion de plusieurs charges de travail simultanĂ©ment.
Au cĆur du laboratoire de modĂ©lisation des donnĂ©es dans la section suivante se trouvent des bases de donnĂ©es YugaByte DB compatibles avec PostgreSQL et Cassandra, contrairement aux bases de donnĂ©es d'origine. Cette approche met en avant la simplicitĂ© d'interaction avec deux API diffĂ©rentes (sur deux ports diffĂ©rents) d'un mĂȘme cluster de bases de donnĂ©es, au lieu d'utiliser des clusters complĂštement indĂ©pendants de deux bases de donnĂ©es diffĂ©rentes.
Dans les sections suivantes, nous allons explorer le laboratoire de modélisation des données pour illustrer les différences et certaines similitudes entre les bases de données examinées.
Laboratoire de modélisation des données
Installation des bases de données
Ătant donnĂ© l'accent mis sur la conception du modĂšle de donnĂ©es (et non sur des architectures de dĂ©ploiement complexes), nous installerons les bases de donnĂ©es dans des conteneurs Docker sur un ordinateur local, puis interagirons avec elles en utilisant les shells de commande appropriĂ©s.
Base de données YugaByte DB compatible avec PostgreSQL & Cassandra
mkdir ~/yugabyte && cd ~/yugabyte
wget https://downloads.yugabyte.com/yb-docker-ctl && chmod +x yb-docker-ctl
docker pull yugabytedb/yugabyte
./yb-docker-ctl create --enable_postgresMongoDB
docker run --name my-mongo -d mongo:latestAccĂšs via la ligne de commande
Connectons-nous aux bases de données à l'aide d'un shell de commande pour les API correspondantes.
PostgreSQL
â est un shell de ligne de commande pour interagir avec PostgreSQL. Pour faciliter l'utilisation, YugaByte DB est fourni avec psql directement dans le dossier bin.
docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgresCassandra
â est un shell de ligne de commande pour interagir avec Cassandra et ses bases de donnĂ©es compatibles via CQL (Cassandra Query Language). Pour plus de commoditĂ©, YugaByte DB est fourni avec cqlsh dans le rĂ©pertoire bin.
Notez que CQL s'inspire de SQL et possÚde des concepts similaires de tables, lignes, colonnes et index. Cependant, en tant que langage NoSQL, il ajoute un ensemble spécifique de contraintes, dont la plupart seront également abordées dans d'autres articles.
docker exec -it yb-tserver-n1 /home/yugabyte/bin/cqlshMongoDB
â est une interface de ligne de commande pour interagir avec MongoDB. Elle se trouve dans le rĂ©pertoire bin de l'installation de MongoDB.
docker exec -it my-mongo bash
cd bin
mongoCréation d'une table
Nous pouvons maintenant interagir avec la base de donnĂ©es pour effectuer diverses opĂ©rations via la ligne de commande. Commençons par crĂ©er une table qui stocke des informations sur les chansons Ă©crites par diffĂ©rents artistes. Ces chansons peuvent faire partie d'un album. Les attributs optionnels pour une chanson incluent l'annĂ©e de sortie, le prix, le genre et la note. Nous devons Ă©galement prendre en compte des attributs supplĂ©mentaires qui pourraient ĂȘtre nĂ©cessaires Ă l'avenir, via un champ « tags ». Ce champ peut stocker des donnĂ©es semi-structurĂ©es sous forme de paires clĂ©-valeur.
PostgreSQL
CREATE TABLE Music (
Artist VARCHAR(20) NOT NULL,
SongTitle VARCHAR(30) NOT NULL,
AlbumTitle VARCHAR(25),
Year INT,
Price FLOAT,
Genre VARCHAR(10),
CriticRating FLOAT,
Tags TEXT,
PRIMARY KEY(Artist, SongTitle)
); Cassandra
La crĂ©ation d'une table dans Cassandra est trĂšs similaire Ă celle dans PostgreSQL. L'une des principales diffĂ©rences est l'absence de contraintes d'intĂ©gritĂ© (par exemple, NOT NULL), mais cela relĂšve de la responsabilitĂ© de l'application, et non de la base de donnĂ©es NoSQL.. La clĂ© primaire est composĂ©e de la clĂ© de partition (colonne Artist dans l'exemple ci-dessous) et d'un ensemble de colonnes de clustering (colonne SongTitle dans l'exemple ci-dessous). La clĂ© de partition dĂ©termine dans quelle partition/shard placer la ligne, tandis que les colonnes de clustering indiquent comment les donnĂ©es doivent ĂȘtre organisĂ©es au sein du shard actuel.
CREATE KEYSPACE myapp;
USE myapp;
CREATE TABLE Music (
Artist TEXT,
SongTitle TEXT,
AlbumTitle TEXT,
Year INT,
Price FLOAT,
Genre TEXT,
CriticRating FLOAT,
Tags TEXT,
PRIMARY KEY(Artist, SongTitle)
);MongoDB
MongoDB organise des donnĂ©es en bases de donnĂ©es (Database) (analogues aux Keyspaces dans Cassandra), oĂč il y a des collections (Collections) (analogues aux tables) contenant des documents (Documents) (analogues aux lignes dans une table). Dans MongoDB, il n'est pas nĂ©cessaire de dĂ©finir un schĂ©ma initial. La commande « use database », montrĂ©e ci-dessous, crĂ©e une instance de la base de donnĂ©es lors de son premier appel et change le contexte pour la nouvelle base de donnĂ©es créée. MĂȘme les collections n'ont pas besoin d'ĂȘtre créées explicitement, elles sont créées automatiquement lors de l'ajout du premier document Ă une nouvelle collection. Notez que par dĂ©faut, MongoDB utilise une base de donnĂ©es de test, donc toute opĂ©ration au niveau des collections sans spĂ©cifier de base de donnĂ©es particuliĂšre se fera par dĂ©faut dans celle-ci.
use myNewDatabase;Obtention d'informations sur la table
PostgreSQL
d Music
Table "public.music"
Column | Type | Collation | Nullable | Default
--------------+-----------------------+-----------+----------+--------
artist | character varying(20) | | not null |
songtitle | character varying(30) | | not null |
albumtitle | character varying(25) | | |
year | integer | | |
price | double precision | | |
genre | character varying(10) | | |
criticrating | double precision | | |
tags | text | | |
Indexes:
"music_pkey" PRIMARY KEY, btree (artist, songtitle)Cassandra
DĂCRIRE LA TABLE MUSIC;
CRĂER TABLE myapp.music (
artist texte,
songtitle texte,
albumtitle texte,
year int,
price float,
genre texte,
tags texte,
PRIMARY KEY (artist, songtitle)
) AVEC ORDRE DE CLUSTERING PAR (songtitle ASC)
ET default_time_to_live = 0
ET transactions = {'enabled': 'false'};MongoDB
utiliser myNewDatabase;
montrer les collections;Insertion de données dans la table
PostgreSQL
INSĂRER DANS Music
(Artist, SongTitle, AlbumTitle,
Year, Price, Genre, CriticRating,
Tags)
VALEURS(
'No One You Know', 'Call Me Today', 'Somewhat Famous',
2015, 2.14, 'Country', 7.8,
'{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
INSĂRER DANS Music
(Artist, SongTitle, AlbumTitle,
Price, Genre, CriticRating)
VALEURS(
'No One You Know', 'My Dog Spot', 'Hey Now',
1.98, 'Country', 8.4
);
INSĂRER DANS Music
(Artist, SongTitle, AlbumTitle,
Price, Genre)
VALEURS(
'The Acme Band', 'Look Out, World', 'The Buck Starts Here',
0.99, 'Rock'
);
INSĂRER DANS Music
(Artist, SongTitle, AlbumTitle,
Price, Genre,
Tags)
VALEURS(
'The Acme Band', 'Still In Love', 'The Buck Starts Here',
2.47, 'Rock',
'{"radioStationsPlaying": ["KHCR", "KBQX", "WTNR", "WJJH"], "tourDates": { "Seattle": "20150625", "Cleveland": "20150630"}, "rotation": Heavy}'
);Cassandra
Globalement, l'expression INSERT en Cassandra ressemble beaucoup Ă son Ă©quivalent en PostgreSQL. Cependant, il existe une grande diffĂ©rence de sĂ©mantique. En Cassandra INSERT est en fait une opĂ©ration UPSERT, oĂč les derniĂšres valeurs sont ajoutĂ©es Ă la ligne, si la ligne existe dĂ©jĂ .
L'entrée de données se fait de maniÚre similaire à PostgreSQL
INSERTsupérieur
.
MongoDB
Bien que MongoDB soit une base de données NoSQL, semblable à Cassandra, son opération d'insertion de données n'a rien à voir avec le comportement sémantique en Cassandra. Dans MongoDB n'a pas de capacités UPSERT, ce qui le rend similaire à PostgreSQL. L'ajout de données par défaut sans _idspecified entraßnera l'ajout d'un nouveau document dans la collection.
db.music.insert( {
artiste: "No One You Know",
titreChanson: "Call Me Today",
titreAlbum: "Somewhat Famous",
année: 2015,
prix: 2.14,
genre: "Country",
tags: {
Compositeurs: ["Smith", "Jones", "Davis"],
DuréeEnSecondes: 214
}
}
);
db.music.insert( {
artiste: "No One You Know",
titreChanson: "My Dog Spot",
titreAlbum: "Hey Now",
prix: 1.98,
genre: "Country",
noteCritique: 8.4
}
);
db.music.insert( {
artiste: "The Acme Band",
titreChanson: "Look Out, World",
titreAlbum:"The Buck Starts Here",
prix: 0.99,
genre: "Rock"
}
);
db.music.insert( {
artiste: "The Acme Band",
titreChanson: "Still In Love",
titreAlbum:"The Buck Starts Here",
prix: 2.47,
genre: "Rock",
tags: {
stationsDeRadioDiffusant:["KHCR", "KBQX", "WTNR", "WJJH"],
datesDeTournée: {
Seattle: "20150625",
Cleveland: "20150630"
},
rotation: "Heavy"
}
}
);
RequĂȘte de table
Peut-ĂȘtre la diffĂ©rence la plus significative entre SQL et NoSQL en ce qui concerne la rĂ©daction de requĂȘtes rĂ©side dans l'utilisation des formulations DE et OĂ. SQL permet de sĂ©lectionner plusieurs tables aprĂšs l'expression DE et l'expression avec OĂ peut ĂȘtre de n'importe quelle complexitĂ© (y compris les opĂ©rations JOIN entre les tables). Toutefois, le NoSQL a tendance Ă imposer une restriction stricte sur DE, et ne fonctionne qu'avec une seule table spĂ©cifiĂ©e, et dans OĂ, il doit toujours y avoir une clĂ© primaire. Cela est dĂ» Ă l'objectif d'amĂ©liorer la performance NoSQL dont nous avons parlĂ© prĂ©cĂ©demment. Cet objectif conduit Ă rĂ©duire tout type d'interaction inter-table et inter-clĂ©. Cela peut entraĂźner une grande latence dans la communication entre les nĆuds lors de la rĂ©ponse Ă une requĂȘte, il est donc prĂ©fĂ©rable de l'Ă©viter en principe. Par exemple, Cassandra exige que les requĂȘtes soient limitĂ©es Ă certains opĂ©rateurs (seuls sont autorisĂ©s =, IN, , =>, <=) sur les clĂ©s de partition, sauf dans le cas d'une requĂȘte d'index secondaire (oĂč seul l'opĂ©rateur = est autorisĂ©).
PostgreSQL
Voici trois exemples de requĂȘtes qui peuvent facilement ĂȘtre exĂ©cutĂ©es par une base de donnĂ©es SQL.
- Afficher toutes les chansons de l'artiste;
- Afficher toutes les chansons de l'artiste dont le titre commence par la premiĂšre partie du nom;
- Afficher toutes les chansons de l'artiste contenant un certain mot dans le titre et dont le prix est inférieur à 1,00.
SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE 'Call%';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE '%Today%'
AND Price > 1.00;Cassandra
Parmi les requĂȘtes mentionnĂ©es ci-dessus, seule la premiĂšre fonctionnera dans Cassandra sans modification, car l'opĂ©rateur LIKE ne peut pas ĂȘtre appliquĂ© aux colonnes de clustering, telles que SongTitle. Dans ce cas, seuls les opĂ©rateurs sont autorisĂ©s = et IN.
SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle IN ('Call Me Today', 'My Dog Spot')
AND Price > 1.00;MongoDB
Comme le montrent les exemples prĂ©cĂ©dents, la principale mĂ©thode de crĂ©ation de requĂȘtes dans MongoDB est . Cette mĂ©thode contient explicitement le nom de la collection (music dans l'exemple ci-dessous), donc une requĂȘte sur plusieurs collections est interdite.
db.music.find( {
artist: "No One You Know"
}
);
db.music.find( {
artist: "No One You Know",
songTitle: /Call/
}
);Lire toutes les lignes de la table
Lire toutes les lignes est simplement un cas particulier du modĂšle de requĂȘte que nous avons examinĂ© prĂ©cĂ©demment.
PostgreSQL
SELECT *
FROM Music;Cassandra
De mĂȘme que l'exemple ci-dessus en PostgreSQL.
MongoDB
db.music.find( {} );Modifier les données dans la table
PostgreSQL
PostgreSQL fournit une instruction UPDATE pour modifier des données. Elle n'a pas de capacités UPSERT, donc l'exécution de cette instruction échouera s'il n'y a plus de lignes dans la base de données.
UPDATE Music
SET Genre = 'Disco'
WHERE Artist = 'The Acme Band' AND SongTitle = 'Still In Love';Cassandra
En Cassandra, il existe UPDATE un Ă©quivalent Ă PostgreSQL. UPDATE a la mĂȘme sĂ©mantique UPSERT, semblable Ă INSERT.
De mĂȘme que l'exemple ci-dessus en PostgreSQL.
MongoDB
OpĂ©ration MongoDB peut entiĂšrement mettre Ă jour un document existant ou mettre Ă jour uniquement certains champs. Par dĂ©faut, elle met Ă jour un seul document avec la sĂ©mantique dĂ©sactivĂ©e. UPSERT. La mise Ă jour de plusieurs documents et un comportement similaire UPSERT peuvent ĂȘtre appliquĂ©s en dĂ©finissant des drapeaux supplĂ©mentaires pour l'opĂ©ration. Comme dans l'exemple ci-dessous, oĂč le genre d'un interprĂšte spĂ©cifique est mis Ă jour en fonction de sa chanson.
db.music.update(
{"artist": "The Acme Band"},
{
$set: {
"genre": "Disco"
}
},
{"multi": true, "upsert": true}
);Suppression de données dans une table
PostgreSQL
DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';Cassandra
De mĂȘme que l'exemple ci-dessus en PostgreSQL.
MongoDB
Dans MongoDB, il existe deux types d'opĂ©rations pour supprimer des documents â et . Les deux types suppriment des documents, mais renvoient des rĂ©sultats diffĂ©rents.
db.music.deleteMany( {
artist: "The Acme Band"
}
);
Suppression de la table
PostgreSQL
DROP TABLE Music;Cassandra
De mĂȘme que l'exemple ci-dessus en PostgreSQL.
MongoDB
db.music.drop();Conclusion
Les dĂ©bats sur le choix entre SQL et NoSQL existent depuis plus de 10 ans. Il y a deux aspects principaux dans ce dĂ©bat : l'architecture du cĆur de la base de donnĂ©es (SQL monolithique et transactionnel contre NoSQL distribuĂ© et non transactionnel) et l'approche de conception de la base de donnĂ©es (modĂ©lisation des donnĂ©es en SQL contre modĂ©lisation de vos requĂȘtes en NoSQL).
Avec une base de donnĂ©es transactionnelle distribuĂ©e comme YugaByte DB, les dĂ©bats sur l'architecture de la base de donnĂ©es peuvent ĂȘtre facilement dissipĂ©s. Alors que les volumes de donnĂ©es deviennent supĂ©rieurs Ă ce qui peut ĂȘtre enregistrĂ© sur un seul nĆud, une architecture entiĂšrement distribuĂ©e qui prend en charge la mise Ă l'Ă©chelle linĂ©aire des Ă©critures avec un sharding / rebalancement automatique devient nĂ©cessaire.
Outre ce qui est dit dans un des articles , les architectures transactionnelles, strictement cohérentes, sont désormais largement utilisées pour assurer une meilleure flexibilité dans le développement par rapport aux architectures non transactionnelles, finalement cohérentes.
En revenant Ă la discussion sur la conception des bases de donnĂ©es, il est juste de dire que les deux approches de conception (SQL et NoSQL) sont nĂ©cessaires pour toute application rĂ©elle complexe. L'approche SQL « modĂ©lisation des donnĂ©es » permet aux dĂ©veloppeurs de mieux rĂ©pondre aux exigences commerciales changeantes, tandis que l'approche NoSQL « modĂ©lisation des requĂȘtes » permet aux mĂȘmes dĂ©veloppeurs de gĂ©rer de grands volumes de donnĂ©es avec une faible latence et un haut dĂ©bit. C'est pourquoi YugaByte DB fournit une API SQL et NoSQL dans un noyau commun, au lieu de promouvoir une seule des approches. De plus, en assurant la compatibilitĂ© avec les langages de bases de donnĂ©es populaires, y compris PostgreSQL et Cassandra, YugaByte DB garantit que les dĂ©veloppeurs n'auront pas besoin d'apprendre un autre langage pour travailler avec un noyau de base de donnĂ©es distribuĂ© et strictement cohĂ©rent.
Dans cet article, nous avons examiné comment les principes de conception des bases de données diffÚrent dans PostgreSQL, Cassandra et MongoDB. Dans les articles suivants, nous plongerons dans des concepts avancés de conception tels que les index, les transactions, les JOIN, les directives TTL et les documents JSON.
Nous vous souhaitons de passer un excellent reste de week-end et vous invitons Ă , qui aura lieu le 14 mai.
Source : habr.com
