+ All Categories
Home > Documents > NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset:...

NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset:...

Date post: 21-May-2020
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
82
NOSQL INSIDE SQL STRATEGY AND TACTICS DMITRY DOLGOV 06-07-2017
Transcript
Page 1: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

NOSQLINSIDE SQL

STRATEGY AND TACTICS

DMITRY DOLGOV

06-07-2017

Page 2: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.1

Page 3: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Jsonb internals and performance-related factors: Benchmarks: How to shoot yourself in the foot

2

Page 4: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Jsonb internals and performance-related factors

: Benchmarks: How to shoot yourself in the foot

2

Page 5: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Jsonb internals and performance-related factors: Benchmarks

: How to shoot yourself in the foot

2

Page 6: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Jsonb internals and performance-related factors: Benchmarks: How to shoot yourself in the foot

2

Page 7: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Internals

Page 8: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Performance-related factors

: On-disk representation: In-memory representation: Indexing support

4

Page 9: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Performance-related factors: On-disk representation

: In-memory representation: Indexing support

4

Page 10: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Performance-related factors: On-disk representation: In-memory representation

: Indexing support

4

Page 11: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Performance-related factors: On-disk representation: In-memory representation: Indexing support

4

Page 12: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.5

Page 13: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. .. Jsonb

.

.

document size

.

.

node

.

.

node

.

.

JEntry

.

.

content

.

.

...

6

Page 14: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. .. Jsonb

.

.

document size

.

.

node

.

.

node

.

.

JEntry

.

.

content

.

.

...

7

Page 15: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. ..Jsonb Header

.

.

type

.

.

number of items

.

.

JEntry

.

.

length or offset?

.

.

value type

.

.

value length or offset8

Page 16: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

JB_OFFSET_STRIDE

: JEntry may contains a value lenght or offset: Offset = access speed: Length = compressibility: Every JB_OFFSET_STRIDE’th JEntry contains an offset: Rest of them contain length

9

Page 17: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. .. Bson

.

.

document size

.

.

node

.

.

node

.

.

Header

.

.

Content

.

.

...

10

Page 18: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. .. Bson

.

.

document size

.

.

node

.

.

node

.

.

Header

.

.

Content

.

.

...

11

Page 19: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. ..Bson Header

.

.

Value type

.

.

Key name

.

.

Value size

12

Page 20: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. ..MySQL Json

.

.

node

.

.

node

.

.

Type

.

.

Value

.

.

...

13

Page 21: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. ..MySQL Json

.

.

node

.

.

node

.

.

Type

.

.

Value

.

.

...

14

Page 22: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. ..MySQL Json Object

.

.

Count of elements

.

.

Size

.

.

Pointers to keys

.

.

Pointers to values

.

.

Keys

.

.

Values15

Page 23: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

. .. Bson

.

.

Key

.

.

Value

.

.

Key

.

.

Value

.

.

Key

.

.

Value

.

.

...

. ..Jsonb/MySQL Json

.

.

Key

.

.

Key

.

.

Value

.

.

Key

.

.

Value

.

.

Value

.

.

...

16

Page 24: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

{”a”: 3, ”b”: ”xyz”}

17

Page 25: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

select pg_relation_filepath(oid),relpages from pg_classwhere relname = ’table_name’;

pg_relation_filepath | relpages----------------------+----------base/40960/325477 | 0(1 row)

18

Page 26: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

bson.dumps({”a”: 3, ”b”: u”xyz”})

19

Page 27: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

$ hexdump -C database/table.ibd

20

Page 28: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

TOAST

. .. Jsonb .. Compression .. Chunks .. Toast table

: TOAST_TUPLE_THRESHOLD bytes (normally 2 kB): PostgreSQL and MySQL use LZ variation: MongoDB uses snappy block compression

21

Page 29: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Alignment

Variable-length portion is aligned to a 4-byte

insert into testvalues(’{”a”: ”aa”, ”b”: 1}’);

insert into testvalues(’{”a”: 1, ”b”: ”aa”}’);

22

Page 30: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

In-memory representation

: Tree-like representation (JsonbValue, Document, Json_dom): Little bit more expensive but more convenient to work with: Mostly in use to modify data (except MySQL): Most of the read operations use on-disk representation

23

Page 31: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Indexing support

: Postgresql – single field, multiple fields, entire document: MongoDB – single field, multiple fields: MySQL – virtual columns, single field, multiple fields

24

Page 32: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

PG indexing details

: JGIN_MAXLENGTH: jsonb_path: jsonb_path_ops

25

Page 33: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Benchmarks

Page 34: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

27

Page 35: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

AWS EC2m4.xlarge instanceseparate instance (database and generator)16GB memory, 4 core 2.3GHzUbuntu 16.04Same VPC and placement groupAMI that supports HVM virtualization typeat least 4 rounds of benchmark

28

Page 36: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

PostgreSQL 9.6.3MySQL 5.7.9MongoDB 3.4.4YCSB 0.9106 rows and operationsAWS EC2

29

Page 37: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Configurationshared_bufferseffective_cache_sizemax_wal_sizeinnodb_buffer_pool_sizewrite concern level (journaled or transaction_sync)

30

Page 38: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Document types“simple” document10 key/value pairs (100 characters)

“large” document100 key/value pairs (200 characters)

“complex” document100 keys, 3 nesting levels (100 characters)

31

Page 39: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Select, GIN”simple” documentjsonb_path_opswhere data @> ’{”key”: ”value”}’::jsonb

32

Page 40: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.33

Page 41: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.34

Page 42: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Select, BTree”simple” documentbtree

35

Page 43: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.36

Page 44: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Select, BTree”complex” documentbtree

37

Page 45: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.38

Page 46: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Scalability”simple” documentm4.largem4.xlargem4.2xlarge

39

Page 47: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.40

Page 48: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Insert”simple” documentjournaled

41

Page 49: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.42

Page 50: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.43

Page 51: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.44

Page 52: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Update 50%, Select 50%”simple” documentUpdate one fieldtransaction_sync

45

Page 53: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.46

Page 54: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Update 50%, Select 50%”simple” documentUpdate one fieldjournaled

47

Page 55: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.48

Page 56: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Update 50%, Select 50%”large” documentUpdate one field

49

Page 57: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.50

Page 58: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

JSON vs JSONB”simple” documentbtreeinsert

51

Page 59: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.52

Page 60: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

JSON vs JSONB”simple” documentbtreeselect

53

Page 61: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.54

Page 62: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

SQL vs JSONB”simple” documentbtreeinsert

55

Page 63: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.56

Page 64: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

SQL vs JSONB”simple” documentbtreeselect

57

Page 65: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.58

Page 66: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

How to bring it down acci-dentally?

Page 67: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.60

Page 68: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Update one field of a document: DETOAST of a document(select, constraints, procedures etc.)

: Reindex of an entire document

61

Page 69: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Document slice”large” documentOne field from a document

62

Page 70: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.63

Page 71: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Document slice”large” document10 fields from a document

64

Page 72: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.65

Page 73: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Document slicecreate type test as (”a” text, ”b” text);insert into test_jsonbvalues(’{”a”: 1, ”b”: 2, ”c”: 3}’);select q.* from test_jsonb,jsonb_populate_record(NULL::test, data) as q;a | b---+---1 | 2(1 row)

66

Page 74: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

67

Page 75: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

TOAST_TUPLE_THRESHOLD”simple” document40 threadsdifferent document sizeselect

68

Page 76: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.69

Page 77: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Select, GIN”simple” documentjsonb_path_opswhere data @> jsonb_build_object(’key’, ’value’)

70

Page 78: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.71

Page 79: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Jsonb is more that good for many use cases

: Benchmarks above are only ”hints”: You need your own tests

72

Page 80: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Jsonb is more that good for many use cases: Benchmarks above are only ”hints”

: You need your own tests

72

Page 81: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

: Jsonb is more that good for many use cases: Benchmarks above are only ”hints”: You need your own tests

72

Page 82: NOSQL INSIDE SQL - STRATEGY AND TACTICS · JB_OFFSET_STRIDE: JEntrymaycontainsavaluelenghtoroffset: Offset=accessspeed: Length=compressibility: EveryJB_OFFSET_STRIDE’thJEntrycontainsanoffset

.

Questions?

github.com/erthalion@erthalion 9erthalion6 at gmail dot com

73


Recommended