SlideShare une entreprise Scribd logo
1  sur  39
Télécharger pour lire hors ligne
Lessons Learned
4
tl;dr
Many people believe:
B-tree = slow and bad
LSM = fast and good
But the truth is more complicated…..
SQLite History
● SQLite 1 – 2000-08-17
– Hash-based GDBM storage engine. GPL
● SQLite 2 – 2001-08-28
– Custom b-tree storage engine. Text only
● SQLite 3 – 2004-06-18
– New b-tree storage engine supporting binary data
(Aside:) Development
● We use Fossil, not Git or Svn or Hg
– Blog, wiki, tickets built-in
– No dependencies
– Improved situational awareness
– Written specifically to support the development of
SQLite
– https://www.fossil-scm.org/
● The trunk is (almost) always production ready
– Problems discovered on a trunk check-in can be
retroactively shunted onto a branch
(Aside:) Development
● Only developers can write tickets
– Because we found that most “bug reports” are really
support requests
● Merge requests or patches not accepted
– In order to keep SQLite in the public domain, lots of
paperwork must be on file for each contributor
– “Open source” but not “Open development”
SQLite4 History
● Coding starts on 2012-01-20
● Intense work throughout 2012 and 2013
● Develop slows and stops in early 2014
● https://sqlite.org/src4
What Happened?
Goals of SQLite4
● Keep the spirit of SQLite intact
– Serverless
– Single-file database
● Faster than SQLite3
– LSM (Log Structured Merge) storage engine
– Compare storage engine keys using memcmp()
● Fix API quirks
● PRIMARY KEY is the storage engine key
● https://sqlite.org/src4
SQLite3 versus SQLite4
● B-tree storage
● Separate key/value
namespace (separate
b-tree) for each table
and index
● 100% backwards
compatible
● LSM storage
● Single key/value
namespace for all
tables and indexes
● Fresh, clean design
“Database” versus “Storage Engine”
● The “database” translates high-level SQL into
low-level key/value operations against the
“storage engine”
● In an SQL “database”, the “storage engine” is
just one of many component parts
● Some products call themselves “databases”
when they are really just a “storage engine”:
BerkeleyDB
GDBM
LevelDB
LMDB
RocksDB
Kyoto Cabinet
Ins & Outs of
Compile SQL
into bytecode
Bytecode
InterpreterSQL Prep'ed
Stmt
Result
Storage EngineThe Query Planner AI
SQLite4 keeps these parts
SQLite4 replaces this part
with a new LSM storage
engine
High-level Inputs To The Database
SELECT
blob.rid AS blobRid,
uuid AS uuid,
datetime(event.mtime,toLocal()) AS timestamp,
coalesce(ecomment, comment) AS comment,
coalesce(euser, user) AS user,
blob.rid IN leaf AS leaf,
bgcolor AS bgColor,
event.type AS eventType,
(SELECT group_concat(substr(tagname,5), ', ') FROM tag,
tagxref
WHERE tagname GLOB 'sym-*' AND tag.tagid=tagxref.tagid
AND tagxref.rid=blob.rid AND tagxref.tagtype>0) AS tags,
tagid AS tagid,
brief AS brief,
event.mtime AS mtime
FROM event CROSS JOIN blob
WHERE blob.rid=event.objid
AND NOT EXISTS(SELECT 1 FROM tagxref
WHERE tagid=5 AND tagtype>0
AND rid=blob.rid)
AND event.type='ci' ORDER BY event.mtime DESC LIMIT 50
Low-level Byte-code Key/Value Ops
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 84 0 00 Start at 84
1 Noop 6 14 0 00
2 Integer 50 1 0 00 r[1]=50; LIMIT counter
3 OpenRead 0 45 0 11 00 root=45 iDb=0; event
4 OpenRead 7 46 0 k(2,,) 00 root=46 iDb=0; event_i1
5 OpenRead 1 2 0 4 00 root=2 iDb=0; blob
6 Last 7 83 2 0 00
7 DeferredSeek 7 0 0 00 Move 0 to 7.rowid if
8 Column 0 0 2 00 r[2]=event.type
9 Ne 3 82 2 (BINARY) 52 if r[2]!=r[3] goto 82
10 IdxRowid 7 4 0 00 r[4]=rowid
11 SeekRowid 1 82 4 00 intkey=r[4]; pk
12 Integer 0 6 0 00 r[6]=0; Init EXISTS r
13 Integer 1 7 0 00 r[7]=1; LIMIT counter
14 OpenRead 5 56 0 7 00 root=56 iDb=0; tagxre
15 OpenRead 8 57 0 k(3,,,) 02 root=57 iDb=0; sqlite
16 Rowid 1 8 0 00 r[8]=rowid
17 Integer 5 9 0 00 r[9]=5
18 SeekGE 8 25 8 2 00 key=r[8..9]
19 IdxGT 8 25 8 2 00 key=r[8..9]
...
Ins & Outs of
Compile SQL
into bytecode
Bytecode
InterpreterSQL Prep'ed
Stmt
Result
Storage Engine
Query Planner
Low-level Ops:
● Find(key)
● Insert(key, value)
● Delete(key)
● Next(key)
SELECT
blob.rid AS blobRid,
uuid AS uuid,
...
FROM ...
ORDER BY ...
LIMIT 50;
0 Init 0 84 0
1 Noop 0 0 0
2 Integer 50 1 0
3 OpenRead 0 45 0
...
About B-Trees
● Page oriented
– read/write a whole page (4096 bytes) at a time
– ... because that is what disk/SSD provides
● Root page → intermediate pages → leaf pages
● Approximately 100 entries per page on average
● B-tree: Key + value stored on all pages
● B+tree: Only keys stored on non-leaf pages -
values always stored in leaves
B+tree Structure
Root page
Leaf pages
Key
Pointer to lower page
Value
B+tree Structure
Non-leaf pages hold only keys
● Key + Data in leaves
● As few as one entry on leaf pages
Between 50 and 8000
keys/page depending
on page size.
Key
Pointer to lower page
Value
Some keys appear more than
once in the tree.
B-tree Structure
● The key is the data.
● Larger entries, hence lower fan-out
● Each key appears in the table only once Key + Value
Pointer to lower page
Usually about 20 to 40 bytes per entry
Key Properties Of B-Trees
● Quickly find any entry given the (one) root page
● Search is O(logN) ←N is the number of entries
– O(logN) page reads
– O(logN) key comparisons
Write Amplification
New 20-byte entry
Entire 4096-byte page must be written
4096
20
= 204.8 write amplification
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Write small b-tree to disk, all at once
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Write 2nd
small b-tree to disk
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Write third small b-tree to disk
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Merge
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Log Structured Merge (LSM)
INSERT
Accumulate
in RAM
Merge
Level 0:
Level 1:
Level 2:
Log Structured Merge (LSM)
● Faster writes
● Reduced write
amplification
● Linear writes
● Less SSD wear
● Slower reads
● Background merge
process
● More space on disk
● Greater complexity
Good Bad
The LSM1 Storage Engine
● All content stored in one file on disk
● Transactions
● Incremental merging → All INSERT operations
take about the same amount of time
● Range Delete
● Faster than LevelDB
Compile SQL
into bytecode
Bytecode
InterpreterSQL Prep'ed
Stmt
Result
Storage Engine
Delete old B-tree storage engine
Insert new LSM storage engine
CREATE TABLE user(
login TEXT PRIMARY KEY,
name TEXT UNIQUE,
officeId TEXT REFERENCES office,
jobType TEXT REFERENCES roles,
-- Other fields omitted....
);
INSERT INTO users(login,name,officeId,jobType)
VALUES('drh', 'Richard', '3D17','BDFL');
Schema:
Will this be faster using LSM?
CREATE TABLE user(
login TEXT PRIMARY KEY,
name TEXT UNIQUE,
officeId TEXT REFERENCES office,
jobType TEXT REFERENCES roles,
-- Other fields omitted....
);
INSERT INTO users(login,name,officeId,jobType)
VALUES('drh', 'Richard', '3D17','BDFL');
4 reads, then if everything is ok, 1 write → Slower!
CREATE TABLE user(
login TEXT PRIMARY KEY,
name TEXT UNIQUE,
officeId TEXT REFERENCES office,
jobType TEXT REFERENCES roles,
-- Other fields omitted....
);
REPLACE INTO users(login,name,officeId,jobType)
VALUES('drh', 'Richard', '3D17','BDFL');
0 reads, then if everything is ok, 1 write → Faster
Remove
constraints
Unified Key Namespace
● All tables are stored in a single namespace
● Every key must begin with a “table-id”
● With 100 tables in the schema, every search
begins with about 7 extra key comparisons
Lessions
● SQLite3 is already very fast and hard to beat
● LSM is great for “blind” writes, but does not
work as well when constraints must be checked
prior to each write
● Many workloads do more reading than writing
● Store each table and index in its own private
key namespace
2009 2010 2011 2012 2013 2014 2015 2016 2017 2018
0%
50%
100%
150%
200%
250%
300%
350%
3.6.7
3.6.15
3.6.23
3.7.2
3.7.5
3.7.8
3.7.13
3.7.14
3.7.17
3.8.0
3.8.1
3.8.2
3.8.3
3.8.4
3.8.5
3.8.6
3.8.7
3.8.8
3.8.9
3.8.10
3.8.11
3.9.0
3.10.0
3.11.0
3.12.0
3.13.0
3.14.0
3.15.0
3.16.0
3.17.0
3.18.0
3.19.0
3.20.0
CPU Cycles
SQLite3 Performance
Work on
SQLite4
Back-porting Lessons To SQLite3
● Added WITHOUT ROWID tables
– A backwards-compatible hack that allows any
arbitrary PRIMARY KEY to serve as the key in the
key/value storage
● Faster key comparison routines
● The LSM1 virtual table
– Access an LSM1 database file as a single table
within a larger schema
● Improved LSM techniques in FTS5
Questions?
4

Contenu connexe

Tendances

Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorFlink Forward
 
Oracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud InfrastructureOracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud InfrastructureSinanPetrusToma
 
The Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialThe Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialJean-François Gagné
 
MySQL GTID 시작하기
MySQL GTID 시작하기MySQL GTID 시작하기
MySQL GTID 시작하기I Goo Lee
 
Iceberg: A modern table format for big data (Strata NY 2018)
Iceberg: A modern table format for big data (Strata NY 2018)Iceberg: A modern table format for big data (Strata NY 2018)
Iceberg: A modern table format for big data (Strata NY 2018)Ryan Blue
 
jemalloc 세미나
jemalloc 세미나jemalloc 세미나
jemalloc 세미나Jang Hoon
 
MyRocks introduction and production deployment
MyRocks introduction and production deploymentMyRocks introduction and production deployment
MyRocks introduction and production deploymentYoshinori Matsunobu
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder
 
HBase Application Performance Improvement
HBase Application Performance ImprovementHBase Application Performance Improvement
HBase Application Performance ImprovementBiju Nair
 
Solving PostgreSQL wicked problems
Solving PostgreSQL wicked problemsSolving PostgreSQL wicked problems
Solving PostgreSQL wicked problemsAlexander Korotkov
 
2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...
2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...
2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...Andrew Lamb
 
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...ScyllaDB
 
Migrating Apache Spark ML Jobs to Spark + Tensorflow on Kubeflow
Migrating Apache Spark ML Jobs to Spark + Tensorflow on KubeflowMigrating Apache Spark ML Jobs to Spark + Tensorflow on Kubeflow
Migrating Apache Spark ML Jobs to Spark + Tensorflow on KubeflowDatabricks
 
YOW2021 Computing Performance
YOW2021 Computing PerformanceYOW2021 Computing Performance
YOW2021 Computing PerformanceBrendan Gregg
 
Futex Scaling for Multi-core Systems
Futex Scaling for Multi-core SystemsFutex Scaling for Multi-core Systems
Futex Scaling for Multi-core SystemsDavidlohr Bueso
 
ORC File - Optimizing Your Big Data
ORC File - Optimizing Your Big DataORC File - Optimizing Your Big Data
ORC File - Optimizing Your Big DataDataWorks Summit
 

Tendances (20)

HDFS Erasure Coding in Action
HDFS Erasure Coding in Action HDFS Erasure Coding in Action
HDFS Erasure Coding in Action
 
Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes Operator
 
Percona toolkit
Percona toolkitPercona toolkit
Percona toolkit
 
Oracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud InfrastructureOracle Database Migration to Oracle Cloud Infrastructure
Oracle Database Migration to Oracle Cloud Infrastructure
 
MyRocks Deep Dive
MyRocks Deep DiveMyRocks Deep Dive
MyRocks Deep Dive
 
The Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication TutorialThe Full MySQL and MariaDB Parallel Replication Tutorial
The Full MySQL and MariaDB Parallel Replication Tutorial
 
MySQL GTID 시작하기
MySQL GTID 시작하기MySQL GTID 시작하기
MySQL GTID 시작하기
 
Iceberg: A modern table format for big data (Strata NY 2018)
Iceberg: A modern table format for big data (Strata NY 2018)Iceberg: A modern table format for big data (Strata NY 2018)
Iceberg: A modern table format for big data (Strata NY 2018)
 
jemalloc 세미나
jemalloc 세미나jemalloc 세미나
jemalloc 세미나
 
MyRocks introduction and production deployment
MyRocks introduction and production deploymentMyRocks introduction and production deployment
MyRocks introduction and production deployment
 
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
 
HBase Application Performance Improvement
HBase Application Performance ImprovementHBase Application Performance Improvement
HBase Application Performance Improvement
 
Solving PostgreSQL wicked problems
Solving PostgreSQL wicked problemsSolving PostgreSQL wicked problems
Solving PostgreSQL wicked problems
 
2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...
2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...
2022-06-23 Apache Arrow and DataFusion_ Changing the Game for implementing Da...
 
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
 
Migrating Apache Spark ML Jobs to Spark + Tensorflow on Kubeflow
Migrating Apache Spark ML Jobs to Spark + Tensorflow on KubeflowMigrating Apache Spark ML Jobs to Spark + Tensorflow on Kubeflow
Migrating Apache Spark ML Jobs to Spark + Tensorflow on Kubeflow
 
YOW2021 Computing Performance
YOW2021 Computing PerformanceYOW2021 Computing Performance
YOW2021 Computing Performance
 
Futex Scaling for Multi-core Systems
Futex Scaling for Multi-core SystemsFutex Scaling for Multi-core Systems
Futex Scaling for Multi-core Systems
 
Apache ZooKeeper
Apache ZooKeeperApache ZooKeeper
Apache ZooKeeper
 
ORC File - Optimizing Your Big Data
ORC File - Optimizing Your Big DataORC File - Optimizing Your Big Data
ORC File - Optimizing Your Big Data
 

Similaire à [db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richard Hipp

扩展世界上最大的图片Blog社区
扩展世界上最大的图片Blog社区扩展世界上最大的图片Blog社区
扩展世界上最大的图片Blog社区yiditushe
 
Fotolog: Scaling the World's Largest Photo Blogging Community
Fotolog: Scaling the World's Largest Photo Blogging CommunityFotolog: Scaling the World's Largest Photo Blogging Community
Fotolog: Scaling the World's Largest Photo Blogging Communityfarhan "Frank"​ mashraqi
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBantoinegirbal
 
2011 Mongo FR - MongoDB introduction
2011 Mongo FR - MongoDB introduction2011 Mongo FR - MongoDB introduction
2011 Mongo FR - MongoDB introductionantoinegirbal
 
15 Ways to Kill Your Mysql Application Performance
15 Ways to Kill Your Mysql Application Performance15 Ways to Kill Your Mysql Application Performance
15 Ways to Kill Your Mysql Application Performanceguest9912e5
 
Inno db 5_7_features
Inno db 5_7_featuresInno db 5_7_features
Inno db 5_7_featuresTinku Ajit
 
23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...
23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...
23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...Amazon Web Services
 
When to no sql and when to know sql javaone
When to no sql and when to know sql   javaoneWhen to no sql and when to know sql   javaone
When to no sql and when to know sql javaoneSimon Elliston Ball
 
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...Marco Gralike
 
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...NoSQLmatters
 
A Tour of PostgREST
A Tour of PostgRESTA Tour of PostgREST
A Tour of PostgRESTbegriffs
 
What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?ukdpe
 
SQL Server 2008 Overview
SQL Server 2008 OverviewSQL Server 2008 Overview
SQL Server 2008 OverviewEric Nelson
 
Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Bob Ward
 
MariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsMariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsFederico Razzoli
 
Old Oracle Versions
Old Oracle VersionsOld Oracle Versions
Old Oracle VersionsJeffrey Kemp
 
Introduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big DataIntroduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big DataGruter
 
SEMLA_logging_infra
SEMLA_logging_infraSEMLA_logging_infra
SEMLA_logging_infraswy351
 
Recent MariaDB features to learn for a happy life
Recent MariaDB features to learn for a happy lifeRecent MariaDB features to learn for a happy life
Recent MariaDB features to learn for a happy lifeFederico Razzoli
 
Индексируем базу: как делать хорошо и не делать плохо Winter saint p 2021 m...
Индексируем базу: как делать хорошо и не делать плохо   Winter saint p 2021 m...Индексируем базу: как делать хорошо и не делать плохо   Winter saint p 2021 m...
Индексируем базу: как делать хорошо и не делать плохо Winter saint p 2021 m...Андрей Новиков
 

Similaire à [db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richard Hipp (20)

扩展世界上最大的图片Blog社区
扩展世界上最大的图片Blog社区扩展世界上最大的图片Blog社区
扩展世界上最大的图片Blog社区
 
Fotolog: Scaling the World's Largest Photo Blogging Community
Fotolog: Scaling the World's Largest Photo Blogging CommunityFotolog: Scaling the World's Largest Photo Blogging Community
Fotolog: Scaling the World's Largest Photo Blogging Community
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
2011 Mongo FR - MongoDB introduction
2011 Mongo FR - MongoDB introduction2011 Mongo FR - MongoDB introduction
2011 Mongo FR - MongoDB introduction
 
15 Ways to Kill Your Mysql Application Performance
15 Ways to Kill Your Mysql Application Performance15 Ways to Kill Your Mysql Application Performance
15 Ways to Kill Your Mysql Application Performance
 
Inno db 5_7_features
Inno db 5_7_featuresInno db 5_7_features
Inno db 5_7_features
 
23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...
23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...
23 October 2013 - AWS 201 - A Walk through the AWS Cloud: Introduction to Ama...
 
When to no sql and when to know sql javaone
When to no sql and when to know sql   javaoneWhen to no sql and when to know sql   javaone
When to no sql and when to know sql javaone
 
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...OakTable World 2015  - Using XMLType content with the Oracle In-Memory Column...
OakTable World 2015 - Using XMLType content with the Oracle In-Memory Column...
 
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
 
A Tour of PostgREST
A Tour of PostgRESTA Tour of PostgREST
A Tour of PostgREST
 
What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?What's New for Developers in SQL Server 2008?
What's New for Developers in SQL Server 2008?
 
SQL Server 2008 Overview
SQL Server 2008 OverviewSQL Server 2008 Overview
SQL Server 2008 Overview
 
Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017Inside sql server in memory oltp sql sat nyc 2017
Inside sql server in memory oltp sql sat nyc 2017
 
MariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAsMariaDB 10.11 key features overview for DBAs
MariaDB 10.11 key features overview for DBAs
 
Old Oracle Versions
Old Oracle VersionsOld Oracle Versions
Old Oracle Versions
 
Introduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big DataIntroduction to Apache Tajo: Data Warehouse for Big Data
Introduction to Apache Tajo: Data Warehouse for Big Data
 
SEMLA_logging_infra
SEMLA_logging_infraSEMLA_logging_infra
SEMLA_logging_infra
 
Recent MariaDB features to learn for a happy life
Recent MariaDB features to learn for a happy lifeRecent MariaDB features to learn for a happy life
Recent MariaDB features to learn for a happy life
 
Индексируем базу: как делать хорошо и не делать плохо Winter saint p 2021 m...
Индексируем базу: как делать хорошо и не делать плохо   Winter saint p 2021 m...Индексируем базу: как делать хорошо и не делать плохо   Winter saint p 2021 m...
Индексируем базу: как делать хорошо и не делать плохо Winter saint p 2021 m...
 

Plus de Insight Technology, Inc.

グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?Insight Technology, Inc.
 
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~Insight Technology, Inc.
 
事例を通じて機械学習とは何かを説明する
事例を通じて機械学習とは何かを説明する事例を通じて機械学習とは何かを説明する
事例を通じて機械学習とは何かを説明するInsight Technology, Inc.
 
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーンInsight Technology, Inc.
 
MBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごとMBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごとInsight Technology, Inc.
 
グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?Insight Technology, Inc.
 
DBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォームDBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォームInsight Technology, Inc.
 
SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門Insight Technology, Inc.
 
db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019オープニングセッション @ 森田 俊哉 db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019オープニングセッション @ 森田 俊哉 Insight Technology, Inc.
 
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也Insight Technology, Inc.
 
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー Insight Technology, Inc.
 
難しいアプリケーション移行、手軽に試してみませんか?
難しいアプリケーション移行、手軽に試してみませんか?難しいアプリケーション移行、手軽に試してみませんか?
難しいアプリケーション移行、手軽に試してみませんか?Insight Technology, Inc.
 
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介Insight Technology, Inc.
 
そのデータベース、クラウドで使ってみませんか?
そのデータベース、クラウドで使ってみませんか?そのデータベース、クラウドで使ってみませんか?
そのデータベース、クラウドで使ってみませんか?Insight Technology, Inc.
 
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...Insight Technology, Inc.
 
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。 複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。 Insight Technology, Inc.
 
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...Insight Technology, Inc.
 
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]Insight Technology, Inc.
 

Plus de Insight Technology, Inc. (20)

グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?
 
Docker and the Oracle Database
Docker and the Oracle DatabaseDocker and the Oracle Database
Docker and the Oracle Database
 
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
Great performance at scale~次期PostgreSQL12のパーティショニング性能の実力に迫る~
 
事例を通じて機械学習とは何かを説明する
事例を通じて機械学習とは何かを説明する事例を通じて機械学習とは何かを説明する
事例を通じて機械学習とは何かを説明する
 
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
仮想通貨ウォレットアプリで理解するデータストアとしてのブロックチェーン
 
MBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごとMBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごと
 
グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?グラフデータベースは如何に自然言語を理解するか?
グラフデータベースは如何に自然言語を理解するか?
 
DBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォームDBREから始めるデータベースプラットフォーム
DBREから始めるデータベースプラットフォーム
 
SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門SQL Server エンジニアのためのコンテナ入門
SQL Server エンジニアのためのコンテナ入門
 
Lunch & Learn, AWS NoSQL Services
Lunch & Learn, AWS NoSQL ServicesLunch & Learn, AWS NoSQL Services
Lunch & Learn, AWS NoSQL Services
 
db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019オープニングセッション @ 森田 俊哉 db tech showcase2019オープニングセッション @ 森田 俊哉
db tech showcase2019オープニングセッション @ 森田 俊哉
 
db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也db tech showcase2019 オープニングセッション @ 石川 雅也
db tech showcase2019 オープニングセッション @ 石川 雅也
 
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
db tech showcase2019 オープニングセッション @ マイナー・アレン・パーカー
 
難しいアプリケーション移行、手軽に試してみませんか?
難しいアプリケーション移行、手軽に試してみませんか?難しいアプリケーション移行、手軽に試してみませんか?
難しいアプリケーション移行、手軽に試してみませんか?
 
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
 
そのデータベース、クラウドで使ってみませんか?
そのデータベース、クラウドで使ってみませんか?そのデータベース、クラウドで使ってみませんか?
そのデータベース、クラウドで使ってみませんか?
 
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
コモディティサーバー3台で作る高速処理 “ハイパー・コンバージド・データベース・インフラストラクチャー(HCDI)” システム『Insight Qube』...
 
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。 複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
複数DBのバックアップ・切り戻し運用手順が異なって大変?!運用性の大幅改善、その先に。。
 
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
Attunity社のソリューションの日本国内外適用事例及びロードマップ紹介[ATTUNITY & インサイトテクノロジー IoT / Big Data フ...
 
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
レガシーに埋もれたデータをリアルタイムでクラウドへ [ATTUNITY & インサイトテクノロジー IoT / Big Data フォーラム 2018]
 

Dernier

Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 

Dernier (20)

Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 

[db tech showcase Tokyo 2017] C23: Lessons from SQLite4 by SQLite.org - Richard Hipp

  • 2. tl;dr Many people believe: B-tree = slow and bad LSM = fast and good But the truth is more complicated…..
  • 3. SQLite History ● SQLite 1 – 2000-08-17 – Hash-based GDBM storage engine. GPL ● SQLite 2 – 2001-08-28 – Custom b-tree storage engine. Text only ● SQLite 3 – 2004-06-18 – New b-tree storage engine supporting binary data
  • 4. (Aside:) Development ● We use Fossil, not Git or Svn or Hg – Blog, wiki, tickets built-in – No dependencies – Improved situational awareness – Written specifically to support the development of SQLite – https://www.fossil-scm.org/ ● The trunk is (almost) always production ready – Problems discovered on a trunk check-in can be retroactively shunted onto a branch
  • 5. (Aside:) Development ● Only developers can write tickets – Because we found that most “bug reports” are really support requests ● Merge requests or patches not accepted – In order to keep SQLite in the public domain, lots of paperwork must be on file for each contributor – “Open source” but not “Open development”
  • 6. SQLite4 History ● Coding starts on 2012-01-20 ● Intense work throughout 2012 and 2013 ● Develop slows and stops in early 2014 ● https://sqlite.org/src4 What Happened?
  • 7. Goals of SQLite4 ● Keep the spirit of SQLite intact – Serverless – Single-file database ● Faster than SQLite3 – LSM (Log Structured Merge) storage engine – Compare storage engine keys using memcmp() ● Fix API quirks ● PRIMARY KEY is the storage engine key ● https://sqlite.org/src4
  • 8. SQLite3 versus SQLite4 ● B-tree storage ● Separate key/value namespace (separate b-tree) for each table and index ● 100% backwards compatible ● LSM storage ● Single key/value namespace for all tables and indexes ● Fresh, clean design
  • 9. “Database” versus “Storage Engine” ● The “database” translates high-level SQL into low-level key/value operations against the “storage engine” ● In an SQL “database”, the “storage engine” is just one of many component parts ● Some products call themselves “databases” when they are really just a “storage engine”: BerkeleyDB GDBM LevelDB LMDB RocksDB Kyoto Cabinet
  • 10. Ins & Outs of Compile SQL into bytecode Bytecode InterpreterSQL Prep'ed Stmt Result Storage EngineThe Query Planner AI SQLite4 keeps these parts SQLite4 replaces this part with a new LSM storage engine
  • 11. High-level Inputs To The Database SELECT blob.rid AS blobRid, uuid AS uuid, datetime(event.mtime,toLocal()) AS timestamp, coalesce(ecomment, comment) AS comment, coalesce(euser, user) AS user, blob.rid IN leaf AS leaf, bgcolor AS bgColor, event.type AS eventType, (SELECT group_concat(substr(tagname,5), ', ') FROM tag, tagxref WHERE tagname GLOB 'sym-*' AND tag.tagid=tagxref.tagid AND tagxref.rid=blob.rid AND tagxref.tagtype>0) AS tags, tagid AS tagid, brief AS brief, event.mtime AS mtime FROM event CROSS JOIN blob WHERE blob.rid=event.objid AND NOT EXISTS(SELECT 1 FROM tagxref WHERE tagid=5 AND tagtype>0 AND rid=blob.rid) AND event.type='ci' ORDER BY event.mtime DESC LIMIT 50
  • 12. Low-level Byte-code Key/Value Ops addr opcode p1 p2 p3 p4 p5 comment ---- ------------- ---- ---- ---- ------------- -- ------------- 0 Init 0 84 0 00 Start at 84 1 Noop 6 14 0 00 2 Integer 50 1 0 00 r[1]=50; LIMIT counter 3 OpenRead 0 45 0 11 00 root=45 iDb=0; event 4 OpenRead 7 46 0 k(2,,) 00 root=46 iDb=0; event_i1 5 OpenRead 1 2 0 4 00 root=2 iDb=0; blob 6 Last 7 83 2 0 00 7 DeferredSeek 7 0 0 00 Move 0 to 7.rowid if 8 Column 0 0 2 00 r[2]=event.type 9 Ne 3 82 2 (BINARY) 52 if r[2]!=r[3] goto 82 10 IdxRowid 7 4 0 00 r[4]=rowid 11 SeekRowid 1 82 4 00 intkey=r[4]; pk 12 Integer 0 6 0 00 r[6]=0; Init EXISTS r 13 Integer 1 7 0 00 r[7]=1; LIMIT counter 14 OpenRead 5 56 0 7 00 root=56 iDb=0; tagxre 15 OpenRead 8 57 0 k(3,,,) 02 root=57 iDb=0; sqlite 16 Rowid 1 8 0 00 r[8]=rowid 17 Integer 5 9 0 00 r[9]=5 18 SeekGE 8 25 8 2 00 key=r[8..9] 19 IdxGT 8 25 8 2 00 key=r[8..9] ...
  • 13. Ins & Outs of Compile SQL into bytecode Bytecode InterpreterSQL Prep'ed Stmt Result Storage Engine Query Planner Low-level Ops: ● Find(key) ● Insert(key, value) ● Delete(key) ● Next(key) SELECT blob.rid AS blobRid, uuid AS uuid, ... FROM ... ORDER BY ... LIMIT 50; 0 Init 0 84 0 1 Noop 0 0 0 2 Integer 50 1 0 3 OpenRead 0 45 0 ...
  • 14. About B-Trees ● Page oriented – read/write a whole page (4096 bytes) at a time – ... because that is what disk/SSD provides ● Root page → intermediate pages → leaf pages ● Approximately 100 entries per page on average ● B-tree: Key + value stored on all pages ● B+tree: Only keys stored on non-leaf pages - values always stored in leaves
  • 15. B+tree Structure Root page Leaf pages Key Pointer to lower page Value
  • 16. B+tree Structure Non-leaf pages hold only keys ● Key + Data in leaves ● As few as one entry on leaf pages Between 50 and 8000 keys/page depending on page size. Key Pointer to lower page Value Some keys appear more than once in the tree.
  • 17. B-tree Structure ● The key is the data. ● Larger entries, hence lower fan-out ● Each key appears in the table only once Key + Value Pointer to lower page Usually about 20 to 40 bytes per entry
  • 18. Key Properties Of B-Trees ● Quickly find any entry given the (one) root page ● Search is O(logN) ←N is the number of entries – O(logN) page reads – O(logN) key comparisons
  • 19. Write Amplification New 20-byte entry Entire 4096-byte page must be written 4096 20 = 204.8 write amplification
  • 20. Log Structured Merge (LSM) INSERT Accumulate in RAM Write small b-tree to disk, all at once
  • 21. Log Structured Merge (LSM) INSERT Accumulate in RAM Write 2nd small b-tree to disk
  • 22. Log Structured Merge (LSM) INSERT Accumulate in RAM Write third small b-tree to disk
  • 23. Log Structured Merge (LSM) INSERT Accumulate in RAM
  • 24. Log Structured Merge (LSM) INSERT Accumulate in RAM Merge
  • 25. Log Structured Merge (LSM) INSERT Accumulate in RAM
  • 26. Log Structured Merge (LSM) INSERT Accumulate in RAM
  • 27. Log Structured Merge (LSM) INSERT Accumulate in RAM
  • 28. Log Structured Merge (LSM) INSERT Accumulate in RAM Merge Level 0: Level 1: Level 2:
  • 29. Log Structured Merge (LSM) ● Faster writes ● Reduced write amplification ● Linear writes ● Less SSD wear ● Slower reads ● Background merge process ● More space on disk ● Greater complexity Good Bad
  • 30. The LSM1 Storage Engine ● All content stored in one file on disk ● Transactions ● Incremental merging → All INSERT operations take about the same amount of time ● Range Delete ● Faster than LevelDB
  • 31. Compile SQL into bytecode Bytecode InterpreterSQL Prep'ed Stmt Result Storage Engine Delete old B-tree storage engine Insert new LSM storage engine
  • 32. CREATE TABLE user( login TEXT PRIMARY KEY, name TEXT UNIQUE, officeId TEXT REFERENCES office, jobType TEXT REFERENCES roles, -- Other fields omitted.... ); INSERT INTO users(login,name,officeId,jobType) VALUES('drh', 'Richard', '3D17','BDFL'); Schema: Will this be faster using LSM?
  • 33. CREATE TABLE user( login TEXT PRIMARY KEY, name TEXT UNIQUE, officeId TEXT REFERENCES office, jobType TEXT REFERENCES roles, -- Other fields omitted.... ); INSERT INTO users(login,name,officeId,jobType) VALUES('drh', 'Richard', '3D17','BDFL'); 4 reads, then if everything is ok, 1 write → Slower!
  • 34. CREATE TABLE user( login TEXT PRIMARY KEY, name TEXT UNIQUE, officeId TEXT REFERENCES office, jobType TEXT REFERENCES roles, -- Other fields omitted.... ); REPLACE INTO users(login,name,officeId,jobType) VALUES('drh', 'Richard', '3D17','BDFL'); 0 reads, then if everything is ok, 1 write → Faster Remove constraints
  • 35. Unified Key Namespace ● All tables are stored in a single namespace ● Every key must begin with a “table-id” ● With 100 tables in the schema, every search begins with about 7 extra key comparisons
  • 36. Lessions ● SQLite3 is already very fast and hard to beat ● LSM is great for “blind” writes, but does not work as well when constraints must be checked prior to each write ● Many workloads do more reading than writing ● Store each table and index in its own private key namespace
  • 37. 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 0% 50% 100% 150% 200% 250% 300% 350% 3.6.7 3.6.15 3.6.23 3.7.2 3.7.5 3.7.8 3.7.13 3.7.14 3.7.17 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.8.8 3.8.9 3.8.10 3.8.11 3.9.0 3.10.0 3.11.0 3.12.0 3.13.0 3.14.0 3.15.0 3.16.0 3.17.0 3.18.0 3.19.0 3.20.0 CPU Cycles SQLite3 Performance Work on SQLite4
  • 38. Back-porting Lessons To SQLite3 ● Added WITHOUT ROWID tables – A backwards-compatible hack that allows any arbitrary PRIMARY KEY to serve as the key in the key/value storage ● Faster key comparison routines ● The LSM1 virtual table – Access an LSM1 database file as a single table within a larger schema ● Improved LSM techniques in FTS5