Database Design Fundamentalis - Comparans PostgreSQL, Cassandram, et MongoDB

Salve amicis. Antequam ad ferias secundas mensis Maii discedamus, materiam vobis communicamus, quam antecaperemus novi rivi in ​​cursu deducendi. "Relational DBMS".

Database Design Fundamentalis - Comparans PostgreSQL, Cassandram, et MongoDB

Applicatio tincidunt multum temporis in comparandis databases operationalibus multiplicatis est elige unum quod maxime convenit quod inposuit intentum. Necessitates simpliciores notitias exemplandi, cautiones transactionales includere, legere / scribere effectum, scalam horizontalem et tolerantiam culpae includere possunt. Traditionaliter, electio incipit a categoria datorum, SQL vel NoSQL, cum singula categoria claram copiam mercaturarum praebeant. Princeps effectus in terminis humilis latency et alte throughput plerumque videtur sicut exigentiae non-commerciationis et ideo essentialis cuilibet datorum sample.

Propositum huius articuli est auxilium applicationis ad tincidunt facere ut rectam electionem inter SQL et NoSQL in contextu applicationis notitiarum exemplandi. Unam datorum SQL, nempe PostgreSQL, et duos databases NoSQL, Cassandram et MongoDB, inspicimus fundamenta datorum datorum, ut mensas creans, eas populantes, datas ex tabula legendas, et illud delendo. In proximo articulo, certo habebimus indices, transactiones, JOINs, TTL normas, et JSON substructio database design.

Quid interest inter SQL et NoSQL?

SQL databases applicationem flexibilitatem augent per cautiones ACID transactionales, necnon facultatem quaerendi data utendi JOIN in inopinatis modis super exempla datorum relationum normalized existentium.

Datae sunt architecturae monolithicae/unicae nodi et usus replicationis herili-servi ad modum redundantiae, traditionalis SQL databases carent duabus notis momentis - linearibus scalability scribendo (i.e. latis partitionibus per plures nodos) et automatic/nulla notitia damni. Id significat quantitatem datarum receptarum maximam scribere perputium unius nodi non potest excedere. Praeterea aliqua temporalis notitia detrimentum in culpa tolerantiae ratio habenda est (in architectura-nihilo communi). Hic memorari debes recentem committit in exemplum servi nondum repertum esse. updates non-downtime in SQL databases etiam difficiles sunt.

Solent databases nosql a natura distribui, i.e. in eis data in partes divisa et per plures nodos distributa. Requirunt denormalizationem. Hoc significat notitias ingressae etiam aliquoties exscri- bendas esse ut petitionibus specificis quas mittis respondeas. Propositum altiore consequitur altam observantiam reducendo numerum shardorum quae praesto sunt per legit. Hoc implicat quod NoSQL te requiret ut tuas interrogationes effingas, dum SQL te requirit ut notitias tuas effingas.

NoSQL spectat ad altam observantiam in racemo distributo consequendam et haec ratio subiecta est multorum instrumentorum datorum negotiatorum quae ACID transactionis detrimentum includunt, iunguntur, et indices secundarii globales constantes.

Argumentum est quod, dum NosSQL databases lineares scribent scalability et culpa tolerantiae alta praebent, detrimentum cautionum transactionalium eos idoneas ad notitias missio-criticae facit.

Sequens tabula ostendit quomodo notitia exemplaria in NoSQL ab SQL differat.

Database Design Fundamentalis - Comparans PostgreSQL, Cassandram, et MongoDB

SQL et NoSQL: Cur utrumque opus est?

Applicationes realis-mundi cum multis usorum utentium, ut Amazon.com, Netflix, Uber, et Airbnb, elaborata sunt in opera multiplici et multimodam faciendo. Exempli gratia, applicationis commercii sicut Amazon.com necesse est reponere leve pondus, altum-critica notitia ut informationes, productos, ordines, mercium usorum, una cum gravibus, minus sensibilibus data ut producta aestimationes, auxilium nuntia, actio usoris; usoris recensiones ac suasiones. Naturaliter hae applicationes nituntur in uno saltem datorum SQL datorum, cum uno saltem datorum NoSQL. In systematis transversis regionalibus et globali, datorum NosSQL cache pro notitiis geo-distributis operatur ut reposita in fonte SQL datorum creditorum currentium in una regione.

Quomodo YugaByte DB coniungit SQL et NoSQL?

Constructum in repositione instrumenti mixti, auto- sharding, consensus replicationis et ACID transactionum distributarum (inspiratarum a Google Spanner) distributae, IugaByte DB primum apertum datorum fons est mundi, qui simul cum NoSQL (Cassandra & Redis) et compatitur. SQL (PostgreSQL). Ut infra in tabula monstratum est, YCQL, IugaByte DB API cum Cassandra compatitur, notiones simplicium ac multi- clavium ACID transactionum et index secundarii globalis ad NoSQL API exhibetur, inde in temporibus databases NoSQL transactionis inferens. Accedit YCQL, IugaByte DB API compatibilis cum PostgreSQL, conceptus lineares scribentes scalas et culpa latae tolerantiae ad SQL API, SQL databases mundo distribuentes. Quia IugaByte DB in natura transactionalis est, nunc NoSQL API in contextu notitiarum missionalium criticarum adhiberi potest.

Database Design Fundamentalis - Comparans PostgreSQL, Cassandram, et MongoDB

Sicut dictum est in articulo "YSQL Introductio: A PostgreSQL Compatible Distributed SQL API pro YugaByte DB"electio inter SQL vel NoSQL in IugaByte DB tota dependet a notis substratae quod inposuit:

  • Si primum quod inposuit tuum est multi-claves operationes CONIUNCTIO, eligens YSQL, intellige claves tuas per plures nodos distribui posse, inde in superiore latency et/vel inferiore perput quam NoSQL.
  • Alioquin elige utrumque NoSQL APIs, prae oculis habitis quod melius effectum habebis sicut effectus quaesitionum ex uno nodo tempore appositas. IugaByte DB una datorum operativarum pro reali mundo, complexu applicationis esse potest, quae plures simul labores administrare necesse est.

Data plasmationis lab in altera sectione fundatur in PostgreSQL et Cassandra API IugaByte DB databases, ut opponitur databases indigenis. Accessus hic extollit facilitatem inter se cum duobus diversis APIs (in duobus portibus diversis) botri datorum eiusdem, quod opponitur usui uvarum omnino independentium duorum databaserum diversorum.
In sectionibus sequentibus, inspice notitias labrum exemplarium ad illustrandas differentias et aliquas communitatum databaserum quae obductae sunt.

Data Libri Laboratorium

Database installation

Datae emphasin datarum exemplarium designationis (magis quam intricatae architecturae instruere), databases in Docker vasis in machina locali ponemus et cum eis intersecant utentes proprio suo mandato conchas lineas.

PostgreSQL & Cassandra compatible YugaByte DB database

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_postgres

MongoDB

docker run --name my-mongo -d mongo:latest

Imperium recta accessum

Adiungamus cum databases utentes testam mandatorum lineae pro APIs respondente.

PostgreSQL

psql mandatum est linea testam pro mutuo cum PostgreSQL. Ad facilitatem usus, YugaByte DB venit cum psql recta in folder bin.

docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgres

Venus

cqlsh Testa est mandatum lineae cum Cassandra mutuo et eius databases compatibles per CQL (Cassandra Query Language). Pro facilitate usus, YugaByte DB venit cum cqlsh in catalogo bin.
Nota CQL per SQL inspiratum et similes notiones tabularum, versuum, columnarum et indices habet. Nihilominus, ut lingua NoSQL, certam limitum seriem addit, quarum pleraeque etiam in aliis articulis operiemus.

docker exec -it yb-tserver-n1 /home/yugabyte/bin/cqlsh

MongoDB

Brunfelsia mandatum est linea testam ad MongoDB mutuo. Inveniri potest in directorio binorum institutionis MongoDB.

docker exec -it my-mongo bash 
cd bin
mongo

Creando mensam

Nunc cum datorum mutuam dare possumus varias operationes uti linea imperativa. Incipiamus ab creando mensam quae informationes de carminibus a diversis artificibus conscriptas praebet. Haec carmina partem album esse possunt. Item attributa libita pro cantu sunt anni remissionis, pretii, generis et census. Reputare debemus pro adiectis attributis quae in futuro per agrum "tag" requiruntur. Semi-structa notitia in forma key-valoris paria reponere potest.

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)
);	

Venus

Mensam in Cassandra creando simillima est PostgreSQL. Una differentiarum principalium est defectus integritatis coactionum (exempli gratia NOT NULL), sed hoc est officium applicationis, non datorum NosQL. Clavis primaria e partitione clavis (Columna Artifex in exemplo infra) et aggregata columnarum ligaturarum (in columna SongTitle infra exemplum). Partitio clavem determinat utra partitio/shard in row inponatur, et columnae ligaturae indicant quomodo notitia intra testae hodiernae constituatur.

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 notitias in databases ordinat (similis Keyspace in Cassandra), ubi sunt Collectiones (similis tabulae) quae continent Documenta (similis versus in tabula). In MongoDB nullum opus est schema initiale definire. Team "Utor database"infra, ostensum est, datorum instantiat in vocatione prima et contextum mutat pro database novo creato. Etiam collectiones non indigent explicite creari, sed sponte creantur, simpliciter cum primum documentum novae collectionis addideris. Nota quod MongoDB test database per defaltam utitur, ita quaelibet operatio collectio-level sine specifico datorum specifico per defaltam incurret.

use myNewDatabase;

Questus notitia de mensa
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)

Venus

DESCRIBE TABLE MUSIC;
CREATE TABLE myapp.music (
    artist text,
    songtitle text,
    albumtitle text,
    year int,
    price float,
    genre text,
    tags text,
    PRIMARY KEY (artist, songtitle)
) WITH CLUSTERING ORDER BY (songtitle ASC)
    AND default_time_to_live = 0
    AND transactions = {'enabled': 'false'};

MongoDB

use myNewDatabase;
show collections;

Intrantes data in mensam
PostgreSQL

INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Year, Price, Genre, CriticRating, 
    Tags)
VALUES(
    'No One You Know', 'Call Me Today', 'Somewhat Famous',
    2015, 2.14, 'Country', 7.8,
    '{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, CriticRating)
VALUES(
    'No One You Know', 'My Dog Spot', 'Hey Now',
    1.98, 'Country', 8.4
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre)
VALUES(
    'The Acme Band', 'Look Out, World', 'The Buck Starts Here',
    0.99, 'Rock'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, 
    Tags)
VALUES(
    '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}'
);

Venus

Altiore expressio INSERT in Cassandra simillimum quod in PostgreSQL spectat. Sed in semanticis est magna differentia. in Cassandra INSERT est actu operatio UPSERTubi ultimi versui adduntur si iam exstat.

Data viscus similis est PostgreSQL INSERT superiores

.

MongoDB

Etsi MongoDB database NoSQL est sicut Cassandra, eius operatio insertio nihil commune habet cum Cassandrae semanticis moribus. in MongoDB inserta () habet occasiones UPSERTcui simile est PostgreSQL. Addere default data sine _idspecified novum documentum collectioni apponendum faciam.

db.music.insert( {
artist: "No One You Know",
songTitle: "Call Me Today",
albumTitle: "Somewhat Famous",
year: 2015,
price: 2.14,
genre: "Country",
tags: {
Composers: ["Smith", "Jones", "Davis"],
LengthInSeconds: 214
}
}
);
db.music.insert( {
artist: "No One You Know",
songTitle: "My Dog Spot",
albumTitle: "Hey Now",
price: 1.98,
genre: "Country",
criticRating: 8.4
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Look Out, World",
albumTitle:"The Buck Starts Here",
price: 0.99,
genre: "Rock"
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Still In Love",
albumTitle:"The Buck Starts Here",
price: 2.47,
genre: "Rock",
tags: {
radioStationsPlaying:["KHCR", "KBQX", "WTNR", "WJJH"],
tourDates: {
Seattle: "20150625",
Cleveland: "20150630"
},
rotation: "Heavy"
}
}
);

Mensa Query

Forsitan maxima differentia inter SQL et NoSQL in terminis constructionis interrogationis est lingua adhibita FROM и WHERE. SQL concedit postquam expressio FROM selectas plures tabulas, et expressio cum WHERE potest esse ex aliqua multiplicitate (including res JOIN inter tabulas). Nihilominus, NoSQL imponere gravem limitationem tendit FROMet una tantum mensa certa operare, et in WHEREclavis primaria semper specificari debet. Vincula haec in perficiendi NoSQL dis de antea locuti sumus. Hoc desiderium ducit ad omnem modum reductionis in commercio crucis-tabularibus et crucis clavis. Magnam moram in communicatione inter-nodi inducere potest cum petitioni respondeat ideoque in genere optime cavetur. Exempli gratia, Cassandra quaerit interrogationes certis operariis limitandas (tantum =, IN, <, >, =>, <=) in clauibus partitionis, excepto indice secundo (tantum auctor = hic licet).

PostgreSQL

Infra tria exempla quaesitionum quae per datorum SQL datorum facile effici possunt.

  • Artificis carmina propono omnia;
  • Omnia carmina ab artifice exhibe, quae priori tituli parti congruit;
  • Omnia carmina artificis ostende quae certum verbum in titulo habent et pretium minus quam 1.00 habent.
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;

Venus

De quaestionibus PostgreSQL supra recensitis, solus primus in Cassandra immutatus erit, cum auctor LIKE non potest applicari ad pampineis columnis ut SongTitle. Hoc in casu, solum operarii concessum est = и 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

Ut in exemplis praecedentibus ostenditur, methodus principalis quaerendi in MongoDB creandi est db.collection.find (). Haec methodus nomine collectionis expresse continet (music in exemplo infra), ideo interrogatione multarum collectionum prohibetur.

db.music.find( {
  artist: "No One You Know"
 } 
);
db.music.find( {
  artist: "No One You Know",
  songTitle: /Call/
 } 
);

Legere omnes ordines mensam

Omnes ordines legere est simpliciter casus specialis quaestionis exemplaris quod antea inspeximus.

PostgreSQL

SELECT * 
FROM Music;

Venus

Simile est PostgreSQL exemplum supra.

MongoDB

db.music.find( {} );

Recensere data in mensa

PostgreSQL

PostgreSQL instructiones praebet UPDATE mutare data. Occasiones non habet UPSERTsic haec enuntiatio deficiet si ordo in datorum numero non sit.

UPDATE Music
SET Genre = 'Disco'
WHERE Artist = 'The Acme Band' AND SongTitle = 'Still In Love';

Venus

Cassandra UPDATE similis PostgreSQL. UPDATE habet idem semantics UPSERT, similis INSERT.

Simile est PostgreSQL exemplum supra.

MongoDB
operatio update () in MongoDB, documentum exsistentem vel renovationem tantum certos agros renovare potest. Defalta, tantum documentum unum cum semanticis debilitatum updates UPSERT. Adaequationis multa documenta et similes mores UPSERT applicari potest pro operatione vexilla ponere additional. Exempli gratia, genus artificis specifici in cantu suo renovatur.

db.music.update(
  {"artist": "The Acme Band"},
  { 
    $set: {
      "genre": "Disco"
    }
  },
  {"multi": true, "upsert": true}
);

Removere notitia ex mensam

PostgreSQL

DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';

Venus

Simile est PostgreSQL exemplum supra.

MongoDB

MongoDB duo genera operationum habet documenta delere deleteOne () /deleteMany() и removere (). Utraque exemplaria documenta delere sed diversos eventus reddere.

db.music.deleteMany( {
        artist: "The Acme Band"
    }
);

Deletis mensam

PostgreSQL

DROP TABLE Music;

Venus

Simile est PostgreSQL exemplum supra.

MongoDB

db.music.drop();

conclusio,

Altercatio de eligendo inter SQL et NoSQL plus quam X annos saeviebat. Huius disputationis rationes duae principales sunt: ​​architectura machinalis datorum (monolithica, transactionalis SQL nobis distributa, non transactionalis NoSQL) et accessus datorum datorum (exemplar notitias tuas in SQL nobis quaerendo in NoSQL exemplar).

Cum database transactionali distributo sicut YugaByte DB, disceptatio de architectura datorum facile conquiescere potest. Cum data volumina fiunt maiora quam quae ad nodi uni conscribi possunt, architectura plene distributa quae lineares sustinet scalability latis schedulae/rebalancie necessaria est.

Praeterea, sicut in uno articulo dictum est Cloud Google, Architecturae transactionales valde constantes nunc magis sunt, adhibentur ad aptiorem progressionem agilitatem quam non-transactionales, et tandem convenientes architecturae.

Regrediens ad discussionem datorum consiliorum, aequum est dicere utrumque consilium appropinquare (SQL et NoSQL) necessarias esse ad omnem applicationem realem mundi. SQL "data modeling" accessus permittit tincidunt ut facilius occurrat mutandis negotiis requisitis, dum NosQL "quaestio modeling" eadem permittit ut tincidunt operandi in magnis voluminibus notitiarum cum humili latency et alte throughput. Qua de causa YugaByte DB SQL et NoSQL APIs in nucleo communi praebet, quam unum ex accessu promovendo. Accedit, praebens convenientiam cum linguis datorum popularibus inter PostgreSQL et Cassandra, IugaByte DB efficit ut tincidunt non aliam linguam discat ad operandum machinam distributam, valde constantem machinam database.

In hoc articulo inspeximus quomodo fundamentales rationes datorum inter PostgreSQL, Cassandram et MongoDB differant. In articulis futuris, notiones designationis in provectae dabimus ut indices, transactiones, JOINs, TTL normas, et documenta JSON.

Volumus te magna reliqua volutpat et invitare te liberum webinarquae fient die 14 maii.

Source: www.habr.com

Add a comment