supercharge your rdbms with mongodb superpowers

37

Upload: 8kdata-technology

Post on 16-Apr-2017

994 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Supercharge your RDBMS with MongoDB Superpowers
Page 2: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

About $self and 8Kdata *8Kdata*

Page 3: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

The world has changed...

http://chasingafterdear.com/wp-content/uploads/2013/05/how-the-world-has-changed.png

Page 4: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Say you were…

● A happy DBA, managing your RDBMS

● Bofhing your users when required

● Just having to fight devs who don't know who is Mr. Bobby Tables

Page 5: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

… and then NoSQL came

And you started receiving questions like:

I want NoSQL!Install MongoDB!My app is web scale!

Page 6: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Fear no more!You can now

supercharge your RDBMSwith MongoDB superpowers

Page 7: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Page 8: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

ToroDB in one slide

● Document-oriented, JSON, NoSQL db

● Open source (AGPL)

● MongoDB compatibility (wire protocol level)

Page 9: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Page 10: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Mapping unstructured datato relational

Page 11: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

ToroDB storage internals

{ "name": "ToroDB", "data": { "a": 42, "b": "hello world!" }, "nested": { "j": 42, "deeper": { "a": 21, "b": "hello" } }}

Page 12: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

ToroDB storage internals

The document is split into the following subdocuments:

{ "name": "ToroDB", "data": {}, "nested": {} }

{ "a": 42, "b": "hello world!"}

{ "j": 42, "deeper": {}}

{ "a": 21, "b": "hello"}

Page 13: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

ToroDB storage internalsβ”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ did β”‚ index β”‚ _id β”‚ name β”‚β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”‚ 0 β”‚ Β€ β”‚ \x5451a07de7032d23a908576d β”‚ ToroDB β”‚β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ did β”‚ index β”‚ a β”‚ b β”‚β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”‚ 0 β”‚ Β€ β”‚ 42 β”‚ hello world! β”‚β”‚ 0 β”‚ 1 β”‚ 21 β”‚ hello β”‚β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”β”‚ did β”‚ index β”‚ j β”‚β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”‚ 0 β”‚ Β€ β”‚ 42 β”‚β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”˜

Page 14: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

ToroDB storage internalsselect * from demo.structuresβ”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ sid β”‚ _structure β”‚β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”‚ 0 β”‚ {"t": 3, "data": {"t": 1}, "nested": {"t": 2, "deeper": {"i": 1, "t": 1}}} β”‚β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

select * from demo.root;β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”β”‚ did β”‚ sid β”‚β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”‚ 0 β”‚ 0 β”‚β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜

Page 15: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

How data is stored in schema-less

Data normalization

Page 16: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

This is how we store in ToroDB

Page 17: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Advantages over MongoDB

Page 18: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

ToroDB: native SQL

Page 19: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

torodb$ select * from toroviews.person ;β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”β”‚ did β”‚ surname β”‚ name β”‚ age β”‚β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”‚ 0 β”‚ Hernandez β”‚ Alvaro β”‚ Β€ β”‚β”‚ 1 β”‚ Surname β”‚ Name β”‚ 31 β”‚β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”˜(2 rows)

torodb$ select * from toroviews."person.contact";β”Œβ”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ did β”‚ verified β”‚ email β”‚β”œβ”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”‚ 0 β”‚ t β”‚ [email protected] β”‚β”‚ 1 β”‚ Β€ β”‚ [email protected] β”‚β””β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜(2 rows)

ToroDB VIEWs

Page 20: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

VIEWs, ToroDB from any SQL tool

Page 21: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Mix-and-match relational & NoSQL

● Use the same database for both your relational data and ToroDB

● Just use separate schemas (if you will)

● Don't write to ToroDB data or metadata tables

● Query with SQL, do joins, whatever!

Page 22: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

And much more!

● Atomic batch-operations

● Clean reads

● Within node… transactions! (coming soon)

Page 23: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Data discoverability, SQL connectors● They are two of the major announcements for MongoDB 3.2

● To discover data, MongoDB samples data. ToroDB: just look at table structures! (and join with root if you want a count)

● SQL connectors: native, no emulation

Page 24: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Replication

Page 25: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

ToroDB v0.4● ToroDB works as a secondary slave of a MongoDB master (or slave, chained rep)

● Implements the full replication protocol (not as an oplog tailable query)

● Open source github.com/torodb/torodb (devel branch, version 0.4-SNAPSHOT)

Page 26: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Horizontal scalability(aka sharding)

Page 27: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Write scalability(sharding)

● MongoDB's sharding API not implemented yet (roadmap: ToroDB 0.8)

● Will use MongoDB's mongos without modification, as well as config servers

● That might change in the future (pg_shard?)

Page 28: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Horizontal scalability(storage level)

● Another non-exclusive option is to have ToroDB store data in a distributed database

● Requires a distributed database like GreenPlum, CitusDb or RedShift

● Paired with replication as a slave:DW in NoSQL enabler

Page 29: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Enabling Data Warehousingfor the NoSQL World

Page 30: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

● Amazon reviews datasetImage-based recommendations on styles and substitutesJ. McAuley, C. Targett, J. Shi, A. van den HengelSIGIR, 2015

● AWS c4.xlarge (4vCPU, 8GB RAM) 4KIOPS SSD

● 4x shards, 3x config; 4x segments GP● 83M records, 65GB plain json

Benchmark

Page 31: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Disk usage

Mongo 3.0, WT, Snappy GP columnar, zlib level 9table size index size total size

0

10000000000

20000000000

30000000000

40000000000

50000000000

60000000000

70000000000

80000000000

Storage requirements

MongoDB vs ToroDB on Greenplum

Mongo

ToroDB on GP

byt

es

Page 32: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

SELECT count( distinct( "reviewerID" ))FROM reviews;

Queries: which one is easier?

db.reviews.aggregate([{ $group: { _id: "reviewerID"}},{ $group: {_id: 1, count: { $sum: 1}}}])

Page 33: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

SELECT "reviewerName", count(*) as reviews FROM reviews GROUP BY "reviewerName" ORDER BY reviews DESC LIMIT 10;

Queries: which one is easier?

db.reviews.aggregate([ { $group : { _id : '$reviewerName', r : { $sum : 1 } } }, { $sort : { r : -1 } }, { $limit : 10 } ], {allowDiskUse: true})

Page 34: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Query times

3 different queries Q3 on MongoDB: aggregate fails

27.95 74.87 00

200

400

600

800

1000

1200969 1007

035 13 31

Query duration (s)

MongoDB vs ToroDB on Greenplum

MongoDB

ToroDB on GP

speedup

seco

nd

s

Page 35: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Announcing today…

MyToro!(experimental)

Page 36: Supercharge your RDBMS with MongoDB Superpowers

ToroDB @NoSQLonSQL

Page 37: Supercharge your RDBMS with MongoDB Superpowers