Salve amicis. Antequam ad ferias secundas mensis Maii discedamus, materiam vobis communicamus, quam antecaperemus novi rivi in cursu deducendi.
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.
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.
Sicut dictum est in articulo
- 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
docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgres
Venus
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
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 UPSERT
ubi 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 UPSERT
cui 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 FROM
et una tantum mensa certa operare, et in WHERE
clavis 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 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 UPSERT
sic 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 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
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
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
Source: www.habr.com