ืฉืืื ืืืจืื. ืืคื ื ืืืฆืืื ืืืืง ืืฉื ื ืฉื ืืืคืฉืช ืืื, ืื ื ืืฉืชืคืื ืืชืื ืืืืืจ ืฉืชืจืืื ื ืืงืจืืช ืืฉืงืช ืืจื ืืืฉ ืืงืืจืก
ืืคืชืื ืืืฉืืืื ืืืืื ืืื ืจื ืืืฉืืืื ืฉื ืืกืื ื ืชืื ืื ืชืคืขืืืืื ืืจืืืื ืืื ืืืืืจ ืืช ืื ืืืชืืื ืืืืชืจ ืืขืืืก ืืขืืืื ืืืืืขื. ืืฆืจืืื ืขืฉืืืื ืืืืื ืืืื ื ืชืื ืื ืืคืืฉื, ืขืจืืืืืช ืขืกืงืืืช, ืืืฆืืขื ืงืจืืื/ืืชืืื, ืงื ื ืืืื ืืืคืงื ืืกืืืื ืืช ืชืงืืืช. ืืืืคื ืืกืืจืชื, ืืืืืจื ืืชืืืื ืืงืืืืจืืืช ืืกื ืื ืชืื ืื, SQL ืื NoSQL, ืืืืืื ืฉืื ืงืืืืจืื ืืฆืืื ืกื ืืจืืจ ืฉื ืคืฉืจืืช. ืืืฆืืขืื ืืืืืื ืืืื ืืื ืฉื ืืืืื ื ืืื ืืชืคืืงื ืืืืื ื ืชืคืกืื ืืืจื ืืื ืืืจืืฉื ืฉืืื ื ื ืืชื ืช ืืืืืคื ืืืื ืืื ืืืื ืืช ืขืืืจ ืื ืืกื ื ืชืื ืื ืืืืืื.
ืืืจืช ืืืืจ ืื ืืื ืืขืืืจ ืืืคืชืื ืืคืืืงืฆืืืช ืืขืฉืืช ืืช ืืืืืจื ืื ืืื ื ืืื SQL ื-NoSQL ืืืงืฉืจ ืฉื ืืืืืื ืฉื ื ืชืื ื ืืืฉืืืื. ื ืกืชืื ืขื ืืกื ื ืชืื ืื ืืื ืฉื SQL, ืืืืืจ PostgreSQL, ืืฉื ื ืืกืื ื ืชืื ืื NoSQL, Cassandra ื-MongoDB, ืืื ืืืกืืช ืืช ืืืกืืืืช ืฉื ืขืืฆืื ืืกื ืื ืชืื ืื, ืืืื ืืฆืืจืช ืืืืืืช, ืืืืืืกื, ืงืจืืืช ื ืชืื ืื ืืืืื ืืืืืงืชื. ืืืืืจ ืืื, ื ืงืคืื ืืืกืชืื ืขื ืืื ืืงืกืื, ืขืกืงืืืช, JOINs, ืื ืืืืช TTL ืืขืืฆืื ืืกื ื ืชืื ืื ืืืืกืก JSON.
ืื ืืืืื ืืื SQL ื-NoSQL?
ืืกืื ื ืชืื ืื ืฉื SQL ืืืืืจืื ืืช ืืืืฉืืช ืืืืฉืื ืืืืฆืขืืช ืขืจืืืืืช ืขืกืงืืืช ACID, ืืื ืื ืืช ืืืืืืช ืฉืืื ืืืฆืข ืฉืืืืชืืช ืื ืชืื ืื ืืืืฆืขืืช JOIN ืืืจืืื ืืืชื ืฆืคืืืืช ืขื ืืื ืืืืืื ืงืืืืื ืฉื ืืกืื ื ืชืื ืื ืืืกืืื ืื ืืจืืืื.
ืืืชืืฉื ืืืจืืืืงืืืจืช ืืืื ืืืืืืช/ืืฆืืืช ืืืืืืช ืฉืืื ืืืฉืืืืฉ ืืืืื ืฉืืคืื ืืืกืืจ-slave ืขืืืจ ืืชืืจืืช, ืืกืื ื ืชืื ืื ืืกืืจืชืืื ืฉื SQL ืืกืจืื ืฉืชื ืชืืื ืืช ืืฉืืืืช - ืืืจืืืืช ืืชืืื ืืื ืืืจืืช (ืืืืืจ ืืืืงื ืืืืืืืืช ืขื ืคื ื ืืกืคืจ ืฆืืชืื) ืืืืืื ื ืชืื ืื ืืืืืืื/ืืคืก. ืืฉืืขืืช ืืืืจ ืืื ืฉืืืืช ืื ืชืื ืื ืืืชืงืืืช ืืื ื ืืืืื ืืขืืืช ืขื ืชืคืืงืช ืืืชืืื ืืืงืกืืืืืช ืฉื ืฆืืืช ืืืื. ืื ืืกืฃ, ืืฉ ืืงืืช ืืืฉืืื ืืืืื ื ืชืื ืื ืืื ื ืืกืืืืืช ืืชืงืืืช (ืืืจืืืืงืืืจืช ืื-ืืืื). ืืื ืืชื ืฆืจืื ืืืืืจ ืฉืืืชืืืืืืืืช ืืืืจืื ืืช ืขืืืื ืื ืืื ืืืื ืืืืื ืืขืืชืง ืืขืื. ืงืฉื ืืืฉืื ืขืืืื ืื ืฉืืื ื ืืืื ืืฉืืชื ืื ืืืกืื ื ืชืื ืื ืฉื SQL.
ืืกืื ื ืชืื ืื ืฉื NoSQL ืืืคืฆืื ืืืจื ืืื ืืืืขื, ืืืืืจ. ืืื, ืื ืชืื ืื ืืืืืงืื ืืืงืืขืื ืืืืคืฆืื ืขื ืคื ื ืืกืคืจ ืฆืืชืื. ืื ืืืจืฉืื ืื ืืจืืืืืฆืื. ืืืฉืืขืืช ืืื ืฉืื ืืช ืื ืชืื ืื ืฉืืืื ื ืืฉ ืืืขืชืืง ืืกืคืจ ืคืขืืื ืืื ืืืืื ืืืงืฉืืช ืืกืคืฆืืคืืืช ืฉืืชื ืฉืืื. ืืืืจื ืืืืืืช ืืื ืืืฉืื ืืืฆืืขืื ืืืืืื ืขื ืืื ืืคืืชืช ืืกืคืจ ืืจืกืืกืื ืืืืื ืื ืืืืื ืืงืจืืื. ืื ืืจืื ืฉ-NoSQL ืืืจืฉ ืืื ืืขืฆื ืืช ืืฉืืืืชืืช ืฉืื, ืืขืื ืฉ-SQL ืืืจืฉ ืืื ืืขืฆื ืืช ืื ืชืื ืื ืฉืื.
NoSQL ืืชืืงืืช ืืืฉืืช ืืืฆืืขืื ืืืืืื ืืืฉืืื ืืืืืจ ืืืื ืืจืฆืืื ื ืืืกืืกื ืืฉืื ืืืื ืจืืื ืืชืื ืื ืืกืื ื ืชืื ืื ืืืืืืื ืืืืื ืขืกืงืืืช ACID, JOINs ืืืื ืืงืกืื ืืฉื ืืื ืืืืืืืื ืขืงืืืื.
ืืฉ ืืขื ื ืฉืืขืื ืฉืืกืื ื ืชืื ืื ืฉื NoSQL ืืกืคืงืื ืืืจืืืืช ืืชืืื ืืื ืืืจืืช ืืกืืืื ืืช ืชืงืืืช ืืืืื, ืืืืื ืขืจืืืืืช ืขืกืงืืืช ืืืคื ืืืชื ืืื ืืชืืืืื ืื ืชืื ืื ืงืจืืืืื ืืืฉืืื.
ืืืืื ืืืื ืืจืื ืืืฆื ืืืื ื ืชืื ืื ื-NoSQL ืฉืื ื ื-SQL.
SQL ื-NoSQL: ืืืืข ืืฉ ืฆืืจื ืืฉื ืืื?
ืืคืืืงืฆืืืช ืืขืืื ืืืืืชื ืขื ืืกืคืจ ืืืื ืฉื ืืฉืชืืฉืื, ืืืื Amazon.com, Netflix, Uber ื-Airbnb, ืืืืืืช ืขื ืืืฆืืข ืืฉืืืืช ืืืจืืืืช ืืจื-ืคื ืื. ืืืืืื, ืืคืืืงืฆืืืช ืืกืืจ ืืืงืืจืื ื ืืื Amazon.com ืฆืจืืื ืืืืกื ื ืชืื ืื ืงืืื ืืงืจืืืืื ืืื ืืืืข ืืฉืชืืฉ, ืืืฆืจืื, ืืืื ืืช, ืืฉืืื ืืืช, ืืื ืขื ื ืชืื ืื ืืืืื ืืคืืืช ืจืืืฉืื ืืื ืืืงืืจืืช ืืืฆืจืื, ืืืืขืืช ืชืืืื, ืคืขืืืืช ืืฉืชืืฉืื, ืืืงืืจืืช ืืืืืฆืืช ืืฉืชืืฉืื. ืืืืคื ืืืขื, ืืืฉืืืื ืืื ืืกืชืืืื ืขื ืืกื ื ืชืื ืื SQL ืืื ืืคืืืช ืืื ืขื ืืกื ื ืชืื ืื NoSQL ืืื ืืคืืืช. ืืืขืจืืืช ืืืฆืืช ืืืืจืืืช ืืืืืืืืืช, ืืกื ื ืชืื ืื NoSQL ืคืืขื ืืืืืื ืืืืืจ ืืืืืืจืคื ืขืืืจ ื ืชืื ืื ืืืืืืกื ืื ืืืกื ื ืชืื ืื SQL ืืงืืจ ืืืืื ืืคืืขื ืืืืืจ ืืกืืื.
ืืืฆื YugaByte DB ืืฉืื SQL ื-NoSQL?
ื ืื ื ืขื ืื ืืข ืืืกืื ืืขืืจื ืืื ืื ืืืื, ืคืืฆืื ืืืืืืื, ืฉืืคืื ืงืื ืฆื ืืืก ืืืืืจ ืืขืกืงืืืช ืืืืืจืืช ACID (ืืืฉืจืืช Google Spanner), YugaByte DB ืืื ืืกื ืื ืชืื ืื ืืจืืฉืื ืืขืืื ืืงืื ืคืชืื ืืชืืื ืื-ืืื ืืช ืขื NoSQL (Cassandra & Redis) ื SQL (PostgreSQL). ืืคื ืฉืืืฆื ืืืืื ืืืื, YCQL, ื-API ืฉื YugaByte DB ืืชืืื ืืงืกื ืืจื, ืืืกืืฃ ืืช ืืืืฉืืื ืฉื ืขืกืงืืืช ACID ืืืืืืช ืืืจืืืืช ืืคืชื ืืืื ืืงืกืื ืืฉื ืืื ืืืืืืืื ื-NoSQL API, ืืืื ืืืืื ืืช ืขืืื ืืกืื ืื ืชืื ืื ืฉื NoSQL ืืจื ืืงืฆืืืช. ืื ืืกืฃ, YCQL, ื-API ืฉื YugaByte DB ืืชืืื ื-PostgreSQL, ืืืกืืฃ ืืช ืืืืฉืืื ืฉื ืงื ื ืืืื ืืชืืื ืืื ืืืจื ืืกืืืื ืืช ืชืงืืืช ืืืืืืืืช ื-SQL API, ืืืืื ืืกืื ื ืชืื ืื ืืืืืจืื ืฉื SQL ืืขืืื. ืืืืืื ืฉ-YugaByte DB ืืื ืืจื ืืงืฆืืื ื ืืืืคืื, ื ืืชื ืืืฉืชืืฉ ืืขืช ื-API ืฉื NoSQL ืืืงืฉืจ ืฉื ื ืชืื ืื ืงืจืืืืื ืืืฉืืื.
ืืคื ืฉื ืืืจ ืืขืืจ ืืืชืื
- ืื ืขืืืก ืืขืืืื ืืขืืงืจื ืฉืื ืืื ืคืขืืืืช JOIN ืืจืืืืช ืืคืชืืืช, ืื ืืขืช ืืืืจืช YSQL, ืืื ืฉืืืคืชืืืช ืฉืื ืขืฉืืืื ืืืืืช ืืืคืฆืื ืขื ืคื ื ืืกืคืจ ืฆืืชืื, ืืืชืืฆืื ืืื ืืื ืืฉืืืื ืืืื ืืืชืจ ื/ืื ืชืคืืงื ื ืืืื ืืืชืจ ืืืฉืจ NoSQL.
- ืืืจืช, ืืืจ ืืืื ืืฉื ื ืืืฉืงื ื-API ืฉื NoSQL, ืชืื ืืืืจ ืฉืชืงืื ืืืฆืืขืื ืืืืื ืืืชืจ ืืชืืฆืื ืืฉืืืืชืืช ืืืืืฉืืช ืืฆืืืช ืืื ืืื ืคืขื. YugaByte DB ืืืื ืืฉืืฉ ืืืกืืก ื ืชืื ืื ืชืคืขืืื ืืืื ืขืืืจ ืืืฉืืืื ืืืจืืืื ืืขืืื ืืืืืชื ืฉืฆืจืืืื ืื ืื ืขืืืกื ืขืืืื ืืจืืืื ืื ืืื ืืช.
ืืขืืืช ืืืืืืื ืฉื ืื ืชืื ืื ืืกืขืืฃ ืืื ืืืืกืกืช ืขื ืืกืื ื ืชืื ืื ืชืืืื YugaByte DB ืฉื PostgreSQL ื- Cassandra API, ืื ืืืื ืืืกืืกื ื ืชืื ืื ืืงืืจืืื. ืืืฉื ืื ืืืืืฉื ืืช ืงืืืช ืืืื ืืจืืงืฆืื ืขื ืฉื ื ืืืฉืงื API ืฉืื ืื (ืืฉืชื ืืฆืืืืช ืฉืื ืืช) ืฉื ืืืชื ืืฉืืื ืืกื ื ืชืื ืื, ืื ืืืื ืืฉืืืืฉ ืืืฉืืืืืช ืขืฆืืืืื ืืืืืืื ืฉื ืฉื ื ืืกืื ื ืชืื ืื ืฉืื ืื.
ืืกืขืืคืื ืืืืื, ื ืกืงืืจ ืืช ืืขืืืช ืืืื ืื ืชืื ืื ืืื ืืืืืืฉ ืืช ืืืืืืื ืืืืง ืืืืฉืืชืฃ ืฉื ืืกืื ืื ืชืื ืื ืืืืืกืื.
ืืขืืืช ืืืื ื ืชืื ืื
ืืชืงื ืช ืืกื ื ืชืื ืื
ืืืชืืฉื ืืืืฉ ืขื ืขืืฆืื ืืืื ื ืชืื ืื (ืืื ืืืจืืืืงืืืจืืช ืคืจืืกื ืืืจืืืืช), ื ืชืงืื ืืกืื ื ืชืื ืื ืืงืื ืืืื ืจืื ืฉื Docker ืืืืฉื ืืืงืืื ืืืืืจ ืืื ื ืืฆืืจ ืืืชื ืืื ืืจืืงืฆืื ืืืืฆืขืืช ืืขืืคืช ืฉืืจืช ืืคืงืืื ืฉืืื.
ืืกื ื ืชืื ืื YugaByte DB ืชืืื 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_postgres
MongoDB
docker run --name my-mongo -d mongo:latest
ืืืฉื ืืฉืืจืช ืืคืงืืื
ืืืื ื ืชืืืจ ืืืกืืกื ืื ืชืื ืื ืืืืฆืขืืช ืืขืืคืช ืฉืืจืช ืืคืงืืื ืขืืืจ ืืืฉืงื ื-API ืืืชืืืืื.
PostgreSQL
docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgres
ืงืกื ืืจื
cqlsh
ืืงืืืื bin
.
ืฉืืื ืื ืฉ-CQL ื ืืฆืจ ืืืฉืจืืช SQL ืืืฉ ืื ืืืฉืืื ืืืืื ืฉื ืืืืืืช, ืฉืืจืืช, ืขืืืืืช ืืืื ืืงืกืื. ืขื ืืืช, ืืฉืคืช NoSQL, ืืื ืืืกืืคื ืกื ืืกืืื ืฉื ืืืืืืช, ืฉืืช ืจืืื ื ืขืกืืง ืื ืืืืืจืื ืืืจืื.
docker exec -it yb-tserver-n1 /home/yugabyte/bin/cqlsh
MongoDB
docker exec -it my-mongo bash
cd bin
mongo
ืืฆืืจืช ืืืื
ืืขืช ืื ื ืืืืืื ืืืฆืืจ ืืื ืืจืืงืฆืื ืขื ืืกื ืื ืชืื ืื ืืื ืืืฆืข ืคืขืืืืช ืฉืื ืืช ืืืืฆืขืืช ืฉืืจืช ืืคืงืืื. ื ืชืืื ืืืฆืืจืช ืืืื ืืืืืกื ืช ืืืืข ืขื ืฉืืจืื ืฉื ืืชืื ืขื ืืื ืืื ืื ืฉืื ืื. ืืฉืืจืื ืืืื ืขืฉืืืื ืืืืืช ืืืง ืืืืืื. ืืื ืื, ืชืืื ืืช ืืืคืฆืืื ืืืืช ืืฉืืจ ืื ืฉื ืช ืืฆืืื, ืืืืจ, ื'ืื ืจ ืืืืจืื. ืขืืื ื ืืงืืช ืืืฉืืื ืชืืื ืืช ื ืืกืคืืช ืฉืขืฉืืืืช ืืืืืจืฉ ืืขืชืื ืืจื ืืฉืื "ืชืืื". ืื ืืืื ืืืืกื ื ืชืื ืื ืืืื ืื ืืืืฆื ืืฆืืจื ืฉื ืฆืืื ืืคืชื-ืขืจื.
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)
);
ืงืกื ืืจื
ืืฆืืจืช ืืืื ืืงืกื ืืจื ืืืื ืืืื ื- PostgreSQL. ืืื ืืืืืืื ืืขืืงืจืืื ืืื ืืืขืืจ ืืืืืฆื ืชืงืื ืืช (ืืืฉื NOT NULL), ืืื ืื ืืืืจืืืช ืืืคืืืงืฆืื, ืื ืืกื ืื ืชืื ืื ืฉื NoSQL. ืืืคืชื ืืจืืฉื ืืืจืื ืืืคืชื ืืืืฆื (ืขืืืืช ืืืื ืืืืืื ืืืื) ืืืงืืืฆื ืฉื ืขืืืืืช ืืฉืืืืืช (ืขืืืืช SongTitle ืืืืืื ืืืื). ืืคืชื ืืืืืฆื ืงืืืข ืืืืื ืืืืฆื/ืฉืืจ ืืฉ ืืืงื ืืช ืืฉืืจื, ืืขืืืืืช ืืืฉืืืืืช ืืฆืืื ืืช ืืืฆื ืืฉ ืืืจืื ืืช ืื ืชืื ืื ืืชืื ืืจืกืืก ืื ืืืื.
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 ืืืจืื ื ืชืื ืื ืืชืื ืืกืื ื ืชืื ืื (Database) (ืืืืื ื-Keyspace ื-Cassandra), ืฉื ืืฉ Collections (ืืืืื ืืืืืืืช) ืืืืืืื ืืกืืืื (ืืืืื ืืฉืืจืืช ืืืืื). ื-MongoDB, ืืขืฆื ืืื ืฆืืจื ืืืืืืจ ืกืืื ืจืืฉืื ืืช. ืงึฐืืึผืฆึธื "ืืฉืชืืฉ ืืืกื ื ืชืื ืื", ืืืืฆื ืืืื, ืืคืขืื ืืช ืืกื ืื ืชืื ืื ืืงืจืืื ืืจืืฉืื ื ืืืฉื ื ืืช ืืืงืฉืจ ืขืืืจ ืืกื ืื ืชืื ืื ืืืืฉ ืฉื ืืฆืจ. ืืคืืื ืืืกืคืื ืื ืฆืจืืืื ืืืืืืฆืจ ืืืคืืจืฉ; ืื ื ืืฆืจืื ืืืืคื ืืืืืืื, ืคืฉืื ืืืฉืจ ืืชื ืืืกืืฃ ืืช ืืืกืื ืืจืืฉืื ืืืืกืฃ ืืืฉ. ืฉืืื ืื ืื MongoDB ืืฉืชืืฉ ืืืกื ืื ืชืื ืื ืฉื ืืืืืงื ืืืจืืจืช ืืืื, ืื ืฉืื ืคืขืืื ืืจืืช ืืืืกืืฃ ืืื ืฆืืื ืืกื ื ืชืื ืื ืกืคืฆืืคื ืชืจืืฅ ืขืืื ืืืจืืจืช ืืืื.
use myNewDatabase;
ืงืืืช ืืืืข ืขื ืืืื
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)
ืงืกื ืืจื
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;
ืืื ืช ื ืชืื ืื ืืืืื
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}'
);
ืงืกื ืืจื
ืืืืื ืืืื INSERT
ื- Cassandra ื ืจืื ืืืื ืืืื ืืื ืฉื-PostgreSQL. ืขื ืืืช, ืืฉ ืืืื ืืื ืืืื ืืกืื ืืืงื. ืืงืกื ืืจื INSERT
ืืื ืืืขืฉื ื ืืชืื UPSERT
, ืืืฉืจ ืืขืจืืื ืืืืจืื ืื ืืชืืืกืคืื ืืฉืืจื ืื ืืฉืืจื ืืืจ ืงืืืืช.
ืืื ืช ื ืชืื ืื ืืืื ื-PostgreSQL
INSERT
ืืขื
.
MongoDB
ืืืจืืช ืฉ-MongoDB ืืื ืืกื ื ืชืื ืื NoSQL ืืื ืงืกื ืืจื, ืืื ืืคืขืืืช ืืืื ืกื ืฉืื ืฉืื ืืืจ ืืืฉืืชืฃ ืขื ืืืชื ืืืืช ืืกืื ืืืช ืฉื ืงืกื ืืจื. ื- MongoDB UPSERT
, ืื ืฉืืืคื ืืืชื ืืืืื ื-PostgreSQL. ืืืกืคืช ื ืชืื ื ืืจืืจืช ืืืื ืืื _idspecified
ืืืจืื ืืืืกืคืช ืืกืื ืืืฉ ืืืืกืฃ.
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"
}
}
);
ืฉืืืืชืช ืืืื
ืืืื ืืืืื ืืืฉืืขืืชื ืืืืชืจ ืืื SQL ื-NoSQL ืืืืื ืช ืื ืืืช ืฉืืืืชืืช ืืื ืืฉืคื ืฉืื ื ืขืฉื ืฉืืืืฉ FROM
ะธ WHERE
. SQL ืืืคืฉืจ ืืืืจ ืืืืื FROM
ืืืจ ืืกืคืจ ืืืืืืช, ืืืืืื ืขื WHERE
ืืืื ืืืืืช ืืื ืืืจืืืืช (ืืืื ืคืขืืืืช JOIN
ืืื ืืฉืืืื ืืช). ืขื ืืืช, NoSQL ื ืืื ืืืืื ืืืืื ืืืืจื ืขื FROM
, ืืขืืื ืจืง ืขื ืืืื ืืืช ืฉืฆืืื ื, ืืืชืื WHERE
, ืืฉ ืืฆืืื ืชืืื ืืช ืืืคืชื ืืจืืฉื. ืื ืงืฉืืจ ืืืืืคืช ืืืืฆืืขืื ืฉื NoSQL ืฉืืืืจื ื ืขืืื ืงืืื ืืื. ืจืฆืื ืื ืืืืื ืืื ืืคืืชื ืืคืฉืจืืช ืืื ืืื ืืจืืงืฆืื ืฆืืืืช ืืืืืืช ืืืคืชืืืช. ืื ืืืื ืืืื ืืก ืขืืืื ืืืื ืืชืงืฉืืจืช ืืื ืืฆืืชืื ืืขืช ืืขื ื ืืืงืฉื ืืืื ืขืืืฃ ืืืืื ืข ืืืืคื ืืืื. ืืืืืื, ืงืกื ืืจื ืืืจืฉืช ืฉืฉืืืืชืืช ืืืื ืืืืืืืช ืืืคืขืืืื ืืกืืืืื (ืืืื =, IN, <, >, =>, <=
) ืขื ืืคืชืืืช ืืืืฆื, ืืืขื ืืืฉืจ ืืืงืฉืื ืืื ืืงืก ืืฉื ื (ืจืง ืืืืคืจืืืจ = ืืืชืจ ืืื).
PostgreSQL
ืืืื ืฉืืืฉ ืืืืืืืช ืืฉืืืืชืืช ืฉื ืืชื ืืืฆืข ืืงืืืช ืขื ืืื ืืกื ื ืชืื ืื ืฉื SQL.
- ืืฆื ืืช ืื ืืฉืืจืื ืฉื ืืื;
- ืืฆื ืืช ืื ืืฉืืจืื ืฉื ืืืื ืืชืืืืื ืืืืง ืืจืืฉืื ืฉื ืืืืชืจืช;
- ืืฆื ืืช ืื ืืฉืืจืื ืฉื ืืื ืฉืืฉ ืืื ืืืื ืืกืืืืช ืืืืชืจืช ืืืืืจื ื ืืื ื-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;
ืงืกื ืืจื
ืืืื ืืฉืืืืชืืช PostgreSQL ืืืคืืจืืืช ืืขืื, ืจืง ืืจืืฉืื ื ืชืขืืื ืืื ืฉืื ืื ืืงืกื ืืจื, ืืืืืื ืฉืืืืคืจืืืจ LIKE
ืื ื ืืชื ืืืืื ืขื ืขืืืืืช ืืฉืืื ืืืื SongTitle
. ืืืงืจื ืื, ืจืง ืืคืขืืืื ืืืจืฉืื =
ะธ 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
ืืคื ืฉืืืฆื ืืืืืืืืช ืืงืืืืืช, ืืฉืืื ืืขืืงืจืืช ืืืฆืืจืช ืฉืืืืชืืช ื- MongoDB ืืื music
ืืืืืื ืืืื), ืืื ืืกืืจ ืืืฆืข ืฉืืืืชืืช ืขื ืืกืคืจ ืืืกืคืื.
db.music.find( {
artist: "No One You Know"
}
);
db.music.find( {
artist: "No One You Know",
songTitle: /Call/
}
);
ืงืจืืืช ืื ืฉืืจืืช ืืืืื
ืงืจืืืช ืื ืืฉืืจืืช ืืื ืคืฉืื ืืงืจื ืืืืื ืฉื ืืคืืก ืืฉืืืืชื ืฉืืืงื ื ืงืืื ืืื.
PostgreSQL
SELECT *
FROM Music;
ืงืกื ืืจื
ืืืืื ืืืืืื ืฉื PostgreSQL ืืขืื.
MongoDB
db.music.find( {} );
ืขืจืืืช ื ืชืื ืื ืืืืื
PostgreSQL
PostgreSQL ืืกืคืง ืืืจืืืช UPDATE
ืืื ืืฉื ืืช ื ืชืื ืื. ืืื ืื ืืืืื ืืืืช UPSERT
, ืื ืฉืืืฉืคื ืืื ืืืืฉื ืื ืืฉืืจื ืืืจ ืื ื ืืฆืืช ืืืกื ืื ืชืื ืื.
UPDATE Music
SET Genre = 'Disco'
WHERE Artist = 'The Acme Band' AND SongTitle = 'Still In Love';
ืงืกื ืืจื
ืืงืกื ืืจื ืืฉ UPDATE
ืืืื ื-PostgreSQL. UPDATE
ืืขื ืืืชื ืกืื ืืืงื UPSERT
, ืืืื INSERT
.
ืืืืื ืืืืืื ืฉื PostgreSQL ืืขืื.
MongoDB
ืืืฆืข UPSERT
. ืขืืืื ืืกืคืจ ืืกืืืื ืืืชื ืืืืช ืืืื UPSERT
ื ืืชื ืืืืื ืขื ืืื ืืืืจืช ืืืืื ื ืืกืคืื ืขืืืจ ืืคืขืืื. ืืืืืื, ืืืืืื ืืืื, ืื'ืื ืจ ืฉื ืืื ืกืคืฆืืคื ืืชืขืืื ืืืชืื ืืฉืืจ ืฉืื.
db.music.update(
{"artist": "The Acme Band"},
{
$set: {
"genre": "Disco"
}
},
{"multi": true, "upsert": true}
);
ืืกืจืช ื ืชืื ืื ืืืืื
PostgreSQL
DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';
ืงืกื ืืจื
ืืืืื ืืืืืื ืฉื PostgreSQL ืืขืื.
MongoDB
ื-MongoDB ืืฉ ืฉื ื ืกืืืื ืฉื ืคืขืืืืช ืืืืืงืช ืืกืืืื -
db.music.deleteMany( {
artist: "The Acme Band"
}
);
ืืืืงืช ืืืื
PostgreSQL
DROP TABLE Music;
ืงืกื ืืจื
ืืืืื ืืืืืื ืฉื PostgreSQL ืืขืื.
MongoDB
db.music.drop();
ืืกืงื ื
ืืืืืืื ืขื ืืืืืจื ืืื SQL ื-NoSQL ืืฉืชืืื ืืืจ ืืืชืจ ื-10 ืฉื ืื. ืืฉ ืฉื ื ืืืืืื ืขืืงืจืืื ืืืืืืื ืืื: ืืจืืืืงืืืจืช ืื ืืข ืืกื ืื ืชืื ืื (SQL ืืื ืืืืื, ืืจื ืืงืฆืืื ืื ืืขืืืช NoSQL ืืืืืจ, ืื ืืจื ืืงืฆืืื ืื) ืืืืฉืช ืขืืฆืื ืืกื ื ืชืื ืื (ืืืืืื ืฉื ืื ืชืื ืื ืฉืื ื-SQL ืืขืืืช ืืืืืื ืฉื ืืฉืืืืชืืช ืฉืื ื-NoSQL).
ืขื ืืกื ื ืชืื ืื ืขืกืงืืืช ืืืืืจ ืืื YugaByte DB, ื ืืชื ืืืคืกืืง ืืงืืืช ืืช ืืืืืืื ืขื ืืจืืืืงืืืจืช ืืกื ืื ืชืื ืื. ืืื ืฉื ืคืื ืื ืชืื ืื ืืืคืืื ืืืืืื ืืืชืจ ืืื ืฉื ืืชื ืืืชืื ืืฆืืืช ืืืื, ืืจืืืืงืืืจื ืืืืืจืช ืืืืืื ืืชืืืืช ืืืืจืืืืช ืืชืืื ืืื ืืืจืืช ืขื ืจืืกืืง/ืืืืื ืืืืฉ ืืืืืืืืื.
ืืืฅ ืืื, ืืคื ืฉื ืืืจ ืืืืช ืืืชืืืช
ืื ื ืืืืจ ืืืืื ืืขืืฆืื ืืกื ืื ืชืื ืื, ืื ืืืื ืืืืจ ืฉืฉืชื ืืืฉืืช ืืขืืฆืื (SQL ื-NoSQL) ื ืืืฆืืช ืขืืืจ ืื ืืืฉืื ืืืจืื ืืขืืื ืืืืืชื. ืืืฉืช "ืืืื ืื ืชืื ืื" ืฉื SQL ืืืคืฉืจืช ืืืคืชืืื ืืขืืื ืืืชืจ ืงืืืช ืืืจืืฉืืช ืืขืกืงืืืช ืืืฉืชื ืืช, ืืขืื ืฉืืืฉืช "ืืืื ืืฉืืืืชืืช" ืฉื NoSQL ืืืคืฉืจืช ืืืืชื ืืคืชืืื ืืคืขืื ืขื ืืืืืืช ืืืืืืช ืฉื ื ืชืื ืื ืขื ืืืืื ื ืืื ืืชืคืืงื ืืืืื. ืืกืืื ืื, YugaByte DB ืืกืคืงืช ืืืฉืงื API ืฉื SQL ื-NoSQL ืืืืื ืืฉืืชืคืช, ืืืงืื ืืงืื ืืืช ืืืืืฉืืช. ืื ืืกืฃ, ืขื ืืื ืืชื ืชืืืืืช ืืฉืคืืช ืืกื ื ืชืื ืื ืคืืคืืืจืืืช ืืืื PostgreSQL ื- Cassandra, YugaByte DB ืืืืื ืฉืืคืชืืื ืื ืืฆืืจืื ืืืืื ืฉืคื ืืืจืช ืืื ืืขืืื ืขื ืื ืืข ืืกื ื ืชืื ืื ืืืืืจ ืืขืงืื ืืืืืื.
ืืืืืจ ืื, ืืืงื ื ืืืฆื ืืกืืืืช ืขืืฆืื ืืกื ืื ืชืื ืื ืฉืื ืื ืืื PostgreSQL, Cassandra ื- MongoDB. ืืืืืจืื ืขืชืืืืื, ื ืฆืืื ืืืืฉืื ืขืืฆืื ืืชืงืืืื ืืืื ืืื ืืงืกืื, ืืจื ืืงืฆืืืช, JOINs, ืื ืืืืช TTL ืืืกืืื JSON.
ืื ื ืืืืืื ืืื ืื ืืื ื ืืืจืช ืืกืืฃ ืืฉืืืข ืืืืืื ืื ืืชืื
ืืงืืจ: www.habr.com