SlideShare uma empresa Scribd logo
1 de 57
Baixar para ler offline
The NOSQL
ST
ORE
Ev
er
yone IGNORED
By Zohaib Sibte H
as
san @ DOorD
a
About mE
Zohaib Sibte Hassan
@zohaibility
Dad, engineer, tinkerer, love open
source & working for DoorDash!
At DoorDash we use Postgres!
DoorD
a
Hi
st
ory
2009 - Friend Feed blog
Hi
st
ory
2011 - I discovered HSTORE and blogged about it
Hi
st
ory
2012 - I revisited imagining FriendFeed on Postgres & HSTORE
Hi
st
ory
2015 - Talk with same title in Dublin
Our Roadmap Today
•A brief look at FriendFeed use
-
case


•Warming up with HSTORE


•Taking it to next level:


•JSONB


•Complex yet simple queries


•Partitioning our documents
Po
st
gr
es
IS ALWAYs
ev
olvING
•Robust schemaless
-
types:


•Array


•HSTORE


•XML


•JSON & JSONB


•Improved storage engine


•Improved Foreign Data Wrappers


•Partitioning support
B
ri
ef
Hi
st
ory
FOR
HS
TORE
HS
TORE
May 2003 - First version of store
HS
TORE
•May 16, 2003 - f
i
rst (unpublished) version of
hstore for PostgreSQL 7.3


•Dec, 05, 2006 - hstore is a part of PostgreSQL 8.2


•May 23, 2007 - GIN index for hstore, PostgreSQL 8.3


•Sep, 20, 2010 - Andrew Gierth improved hstore,
PostgreSQL 9.0


•May 24, 2013 - Nested hstore with array support,
key
-
>
value model
-
>
document
-
based model (Stay
tuned for more on this)
HS
TORE
•Benef
i
ts:


•Provides a
f
l
exible model for storing a semi
-
structured data in Postgres.


•Binary represented so extremely fast! Selecting
f
i
elds or properties.


•GIN and GiST indexes can be used!


•Drawbacks:


•Too
f
l
at! Doesn't support tree
-
like structures
(e.g. JSON introduced in 2006, 3 years after store)
Enou
gh
TH
EORY
L
et
's build som
et
hing s
er
ious
F
ri
en
dFEED
U
SI
NG SQL To BUILD NoSQL
• https:
/
/
backchannel.org/blog/friendfeed
-
schemaless
-
mysql
WHY F
RI
EN
DFEED?
•Good example of understanding available
technology and problem at hand.


•Did not cave in to buzzword, and started
using something less known/reliable.


•Large scale problem with good example on how
modern SQL tooling solves the problem.


•Using tool that you are comfortable with.


•Read blog post!
WHY F
RI
EN
DFEED?
F
RI
EN
DFEED
{


"id": "71f0c4d2291844cca2df6f486e96e37c",


"user_id": "f48b0440ca0c4f66991c4d5f6a078eaf",


"feed_id": "f48b0440ca0c4f66991c4d5f6a078eaf",


"title": "We just launched a new backend system for FriendFeed!",


"link": "http:
/
/
friendfeed.com/e/71f0c4d2-2918-44cc
-
a2df-6f486e96e37c",


"published": 1235697046,


"updated": 1235697046,


}
F
RI
EN
DFEED
CREATE TABLE entities (


added_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,


id BINARY(16) NOT NULL,


updated TIMESTAMP NOT NULL,


body MEDIUMBLOB,


UNIQUE KEY (id),


KEY (updated)


) ENGINE=InnoDB;
HOW
CA
N WE INDEX?
{


"id": "71f0c4d2291844cca2df6f486e96e37c",


"user_id": "f48b0440ca0c4f66991c4d5f6a078eaf",


"feed_id": "f48b0440ca0c4f66991c4d5f6a078eaf",


"title": "We just launched a new backend system for FriendFeed!",


"link": "http://friendfeed.com/e/71f0c4d2-2918-44cc-a2df-6f486e96e37c",


"published": 1235697046,


"updated": 1235697046,


}
F
RI
EN
DFEED INDEXING
CREATE TABLE index_user_id (


user_id BINARY(16) NOT NULL,


entity_id BINARY(16) NOT NULL UNIQUE,


PRIMARY KEY (user_id, entity_id)


) ENGINE=InnoDB;
•Create tables for each indexed f
i
eld.


•Have background workers to populate newly created index.


•Complete language framework to ensure documents are
indexed as they are inserted.
CODING F
RA
M
EW
O
R
HS
TORE
The K
ey
-Value Store Ev
er
yone
Ignored
HS
TORE
HS
TORE
CREATE TABLE feed (


id varchar(64) NOT NULL PRIMARY KEY,


doc hstore


);
HS
TORE
INSERT INTO feed VALUES (


'ff923c93-7769-4ef6-b026-50c5a87a79c5',


'id=>zohaibility, post=>hello'::hstore


);
HS
TORE
SELECT doc
-
>
'post' as post, doc
-
>
'undef
i
ned_f
i
eld' as undef
i
ned


FROM feed


WHERE doc
-
>
'id' = 'zohaibility';
post | undef
i
ned


-------+-----------


hello |


(1 row)
HS
TORE
EXPLAIN SELECT *


FROM feed


WHERE doc
-
>
'id' = 'zohaibility';
QUERY PLAN


-------------------------------------------------------


Seq Scan on feed (cost=0.00
.
.
1.03 rows=1 width=178)


Filter: ((doc
-
>
'id'
:
:
text) = 'zohaibility'
:
:
text)


(2 rows)
INDEXING
HS
TORE
CREATE INDEX feed_user_id_index


ON feed ((doc->'id'));
HS
TORE ❤
GI
S
CREATE INDEX feed_gist_idx


ON feed


USING gist (doc);
HS
TORE ❤
GI
S
SELECT doc->'post' as post, doc->'undefined_field' as should_be_null


FROM feed


WHERE doc @> ‘id=>zohaibility';
post | undef
i
ned


-------+-----------


hello |


(1 row)
R
EI
MA
GI
NING Fr
ei
ndFEED
CREATE TABLE entities (


id BIGINT PRIMARY KEY,


updated TIMESTAMP NOT NULL,


body HSTORE,


…


);
CREATE TABLE index_user_id (


user_id BINARY(16) NOT NULL,


entity_id BINARY(16) NOT NULL UNIQUE,


PRIMARY KEY (user_id, entity_id)


) ENGINE=InnoDB;
CREATE INDEX CONCURRENTLY entity_id_index


ON entities ((body->’entity_id’));
MORE Op
era
to
rs
!
https:
/
/
w
w
w
.postgresql.org/docs/current/hstore.html
JSONB
tO IN
FI
NI
TY
AND B
EY
OND
WHY JSON?
•Well understood, and goto standard for
almost everything on modern web.


•“Self describing”, hierarchical, and
parsing and serialization libraries for
every programming language


•Describes a loose shape of the object,
which might be necessary in some cases.
TW
E
ET
s
TW
E
ET
S TABLE
CREATE TABLE tweets (


id varchar(64) NOT NULL PRIMARY KEY,


content jsonb NOT NULL


);
B
AS
IC QU
ER
Y
SELECT "content"->'text' as txt, "content"->'favorite_count' as cnt


FROM tweets


WHERE “content"->'id_str' == ‘…’
And Y
ES
you
ca
n index
th
is!!!
PE
EK
IN INTO
ST
RU
CT
URE
SELECT *


FROM tweets


WHERE (content->>'favorite_count')::integer >= 1;
😭
EXPLAIN SELECT *


FROM tweets


WHERE (content->'favorite_count')::integer >= 1;
QUERY PLAN


------------------------------------------------------------------


Seq Scan on tweets (cost=0.00
.
.
2453.28 rows=6688 width=718)


Filter: (((content
-
>
>
'favorite_count'
:
:
text))
:
:
integer
>
=
1)


(2 rows)
B
AS
IC INDEXING
CREATE INDEX fav_count_index


ON tweets (((content->’favorite_count')::INTEGER));
B
AS
IC INDEXING
EXPLAIN SELECT *


FROM tweets


WHERE (content->'favorite_count')::integer >= 1;
QUERY PLAN


-----------------------------------------------------------------------------------


Bitmap Heap Scan on tweets (cost=128.12
.
.
2297.16 rows=6688 width=718)


Recheck Cond: (((content
-
>
'favorite_count'
:
:
text))
:
:
integer
>
=
1)


-
>
Bitmap Index Scan on fav_count_index (cost=0.00
.
.
126.45 rows=6688 width=0)


Index Cond: (((content
-
>
'favorite_count'
:
:
text))
:
:
integer
>
=
1)


(4 rows)
JSONB-JI
S
SELECT content#>>’{text}' as txt


FROM tweets


WHERE (content#>'{entities,hashtags}') @> '[{"text": "python"}]'::jsonb;
JSON OP
ERA
TO
R
JSONB Op
era
to
r
MAT
CH
ING TAGS
SELECT content#>>’{text}' as txt


FROM tweets


WHERE (content#>'{entities,hashtags}') @> '[{"text": "python"}]'::jsonb;
INDEXING
CREATE INDEX idx_gin_hashtags


ON tweets


USING GIN ((content#>'{entities,hashtags}') jsonb_ops);
Complex S
ea
r
c
CREATE INDEX idx_gin_rt_hashtags


ON tweets


USING GIN ((content#>'{retweeted_status,entities,hashtags}') jsonb_ops);
SELECT content#>'{text}' as txt


FROM tweets


WHERE (


(content#>'{entities,hashtags}') @> '[{"text": “python"}]'::jsonb


OR


(content#>'{retweeted_status,entities,hashtags}') @> '[{"text": “postgres"}]'::jsonb


);
JSONB +
ECO
SY
ST
E
TH
E POW
ER
OF AL
CH
EM
Y
JSONB + TSVE
CT
OR
CREATE INDEX idx_gin_tweet_text


ON tweets


USING GIN (to_tsvector('english', content->>'text') tsvector_ops);
SELECT content->>'text' as txt


FROM tweets


WHERE to_tsvector('english', content->>'text') @@ to_tsquery('english', 'python');
JSONB + PA
RT
ITIOn
CREATE TABLE part_tweets (


id varchar(64) NOT NULL,


content jsonb NOT NULL


) PARTITION BY hash (md5(content->>’user'->>'id'));


CREATE TABLE part_tweets_0 PARTITION OF part_tweets FOR
VALUES WITH (MODULUS 4, REMAINDER 0);


CREATE TABLE part_tweets_1 PARTITION OF part_tweets FOR
VALUES WITH (MODULUS 4, REMAINDER 1);


CREATE TABLE part_tweets_2 PARTITION OF part_tweets FOR
VALUES WITH (MODULUS 4, REMAINDER 2);


CREATE TABLE part_tweets_3 PARTITION OF part_tweets FOR
VALUES WITH (MODULUS 4, REMAINDER 3);
JSONB + PA
RT
ITIOn + INDEXING
CREATE INDEX pidx_gin_hashtags ON part_tweets USING GIN
((content#>'{entities,hashtags}') jsonb_ops);


CREATE INDEX pidx_gin_rt_hashtags ON part_tweets USING GIN
((content#>'{retweeted_status,entities,hashtags}') jsonb_ops);


CREATE INDEX pidx_gin_tweet_text ON tweets USING GIN
(to_tsvector('english', content->>'text') tsvector_ops);
INSERT INTO part_tweets SELECT * from tweets;
JSONB + PA
RT
ITIOn + INDEXING
EXPLAIN SELECT content#>'{text}' as txt


FROM part_tweets


WHERE (content#>'{entities,hashtags}') @> '[{"text": "postgres"}]'::jsonb;
QUERY PLAN


----------------------------------------------------------------------------------------------------------
-


Append (cost=24.26
.
.
695.46 rows=131 width=32)


-
>
Bitmap Heap Scan on part_tweets_0 (cost=24.26
.
.
150.18 rows=34 width=32)


Recheck Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


-
>
Bitmap Index Scan on part_tweets_0_expr_idx (cost=0.00
.
.
24.25 rows=34 width=0)


Index Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


-
>
Bitmap Heap Scan on part_tweets_1 (cost=80.25
.
.
199.02 rows=32 width=32)


Recheck Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


-
>
Bitmap Index Scan on part_tweets_1_expr_idx (cost=0.00
.
.
80.24 rows=32 width=0)


Index Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


-
>
Bitmap Heap Scan on part_tweets_2 (cost=28.25
.
.
147.15 rows=32 width=32)


Recheck Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


-
>
Bitmap Index Scan on part_tweets_2_expr_idx (cost=0.00
.
.
28.24 rows=32 width=0)


Index Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


-
>
Bitmap Heap Scan on part_tweets_3 (cost=76.26
.
.
198.46 rows=33 width=32)


Recheck Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


-
>
Bitmap Index Scan on part_tweets_3_expr_idx (cost=0.00
.
.
76.25 rows=33 width=0)


Index Cond: ((content #> '{entities,hashtags}'
:
:
text[]) @> '[{"text": "postgres"}]'
:
:
jsonb)


(17 rows)
JSONB + PA
RT
ITIOn + INDEXING
EXPLAIN SELECT content#>'{text}' as txt FROM tweets WHERE (


(content#>'{entities,hashtags}') @> '[{"text": "python"}]'::jsonb


OR


(content#>'{retweeted_status,entities,hashtags}') @> '[{"text": "python"}]'::jsonb


);
LIMIT IS YOUR
IMA
GI
NATION
Don’t Und
er
E
st
imate
th
e pow
er
of
LIN
KS
& R
es
ourc
e
•https:
/
/
w
w
w
.linuxjournal.com/content/postgresql
-
nosql
-
database


•http:
/
/
w
w
w
.sai.msu.su/~megera/postgres/talks/hstore
-
dublin-2013.pdf


•https:
/
/
maxpert.tumblr.com/post/14062057061/the
-
key
-
value
-
store
-
everyone
-
ignored
-
postgresql


•https:
/
/
maxpert.tumblr.com/post/32461917960/migrating
-
friendfeed
-
to
-
postgresql


•https:
/
/
w
w
w
.postgresql.org/docs/current/datatype
-
json.html


•https:
/
/
w
w
w
.postgresql.org/docs/current/functions
-
json.html


•https:
/
/
w
w
w
.postgresql.org/docs/current/gin
-
builtin
-
opclasses.html


•https:
/
/
w
w
w
.postgresql.org/docs/current/ddl
-
partitioning.html


•https:
/
/
w
w
w
.postgresql.org/docs/current/textsearch
-
tables.html


•https:
/
/
pgdash.io/blog/partition
-
postgres-11.html


•https:
/
/
talks.bitexpert.de/dpc15-postgres
-
nosql/#/


•https:
/
/
w
w
w
.postgresql.org/docs/current/hstore.html
TH
ANK YOU!

Mais conteúdo relacionado

Mais procurados

Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to SolrErik Hatcher
 
ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!Alexander Byndyu
 
20130310 solr tuorial
20130310 solr tuorial20130310 solr tuorial
20130310 solr tuorialChris Huang
 
Enterprise Search Solution: Apache SOLR. What's available and why it's so cool
Enterprise Search Solution: Apache SOLR. What's available and why it's so coolEnterprise Search Solution: Apache SOLR. What's available and why it's so cool
Enterprise Search Solution: Apache SOLR. What's available and why it's so coolEcommerce Solution Provider SysIQ
 
Building a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and JavaBuilding a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and Javaantoinegirbal
 
Schemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST APISchemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST APIlucenerevolution
 
Solr: 4 big features
Solr: 4 big featuresSolr: 4 big features
Solr: 4 big featuresDavid Smiley
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMike Friedman
 
よく使うテストヘルパーの紹介 #ios_test_night
よく使うテストヘルパーの紹介 #ios_test_nightよく使うテストヘルパーの紹介 #ios_test_night
よく使うテストヘルパーの紹介 #ios_test_nightKenji Tanaka
 
Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!David Pilato
 
Building your own search engine with Apache Solr
Building your own search engine with Apache SolrBuilding your own search engine with Apache Solr
Building your own search engine with Apache SolrBiogeeks
 
Solr Application Development Tutorial
Solr Application Development TutorialSolr Application Development Tutorial
Solr Application Development TutorialErik Hatcher
 

Mais procurados (20)

Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!ElasticSearch: Найдется все... и быстро!
ElasticSearch: Найдется все... и быстро!
 
Introduction to Apache Solr
Introduction to Apache SolrIntroduction to Apache Solr
Introduction to Apache Solr
 
How Solr Search Works
How Solr Search WorksHow Solr Search Works
How Solr Search Works
 
20130310 solr tuorial
20130310 solr tuorial20130310 solr tuorial
20130310 solr tuorial
 
Introduction to solr
Introduction to solrIntroduction to solr
Introduction to solr
 
Enterprise Search Solution: Apache SOLR. What's available and why it's so cool
Enterprise Search Solution: Apache SOLR. What's available and why it's so coolEnterprise Search Solution: Apache SOLR. What's available and why it's so cool
Enterprise Search Solution: Apache SOLR. What's available and why it's so cool
 
Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014Solr Masterclass Bangkok, June 2014
Solr Masterclass Bangkok, June 2014
 
Elasto Mania
Elasto ManiaElasto Mania
Elasto Mania
 
Building a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and JavaBuilding a Scalable Inbox System with MongoDB and Java
Building a Scalable Inbox System with MongoDB and Java
 
Schemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST APISchemaless Solr and the Solr Schema REST API
Schemaless Solr and the Solr Schema REST API
 
Mysql
MysqlMysql
Mysql
 
Solr: 4 big features
Solr: 4 big featuresSolr: 4 big features
Solr: 4 big features
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World Examples
 
よく使うテストヘルパーの紹介 #ios_test_night
よく使うテストヘルパーの紹介 #ios_test_nightよく使うテストヘルパーの紹介 #ios_test_night
よく使うテストヘルパーの紹介 #ios_test_night
 
Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!Elastify you application: from SQL to NoSQL in less than one hour!
Elastify you application: from SQL to NoSQL in less than one hour!
 
Building your own search engine with Apache Solr
Building your own search engine with Apache SolrBuilding your own search engine with Apache Solr
Building your own search engine with Apache Solr
 
RDF validation tutorial
RDF validation tutorialRDF validation tutorial
RDF validation tutorial
 
Solr Application Development Tutorial
Solr Application Development TutorialSolr Application Development Tutorial
Solr Application Development Tutorial
 
04 standard class library c#
04 standard class library c#04 standard class library c#
04 standard class library c#
 

Semelhante a NoSQL store everyone ignored - Postgres Conf 2021

The NoSQL store everyone ignored
The NoSQL store everyone ignoredThe NoSQL store everyone ignored
The NoSQL store everyone ignoredZohaib Hassan
 
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
 
Turning a Search Engine into a Relational Database
Turning a Search Engine into a Relational DatabaseTurning a Search Engine into a Relational Database
Turning a Search Engine into a Relational DatabaseMatthias Wahl
 
Json to hive_schema_generator
Json to hive_schema_generatorJson to hive_schema_generator
Json to hive_schema_generatorPayal Jain
 
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
 
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodaTDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodatdc-globalcode
 
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentos
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentosConceptos básicos. seminario web 3 : Diseño de esquema pensado para documentos
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentosMongoDB
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPressTaylor Lovett
 
ElasticSearch in action
ElasticSearch in actionElasticSearch in action
ElasticSearch in actionCodemotion
 
Flexible site structure with cake php
Flexible site structure with cake phpFlexible site structure with cake php
Flexible site structure with cake phpandygale
 
Building your first app with MongoDB
Building your first app with MongoDBBuilding your first app with MongoDB
Building your first app with MongoDBNorberto Leite
 
Basic PowerShell Toolmaking - Spiceworld 2016 session
Basic PowerShell Toolmaking - Spiceworld 2016 sessionBasic PowerShell Toolmaking - Spiceworld 2016 session
Basic PowerShell Toolmaking - Spiceworld 2016 sessionRob Dunn
 
TYPO3 Transition Tool
TYPO3 Transition ToolTYPO3 Transition Tool
TYPO3 Transition Toolcrus0e
 

Semelhante a NoSQL store everyone ignored - Postgres Conf 2021 (20)

The NoSQL store everyone ignored
The NoSQL store everyone ignoredThe NoSQL store everyone ignored
The NoSQL store everyone ignored
 
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...
 
SQL vs NoSQL
SQL vs NoSQLSQL vs NoSQL
SQL vs NoSQL
 
Turning a Search Engine into a Relational Database
Turning a Search Engine into a Relational DatabaseTurning a Search Engine into a Relational Database
Turning a Search Engine into a Relational Database
 
Mathias test
Mathias testMathias test
Mathias test
 
Json to hive_schema_generator
Json to hive_schema_generatorJson to hive_schema_generator
Json to hive_schema_generator
 
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
 
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a rodaTDC2016POA | Trilha Web - JSON API: não reinvente a roda
TDC2016POA | Trilha Web - JSON API: não reinvente a roda
 
Full Text Search In PostgreSQL
Full Text Search In PostgreSQLFull Text Search In PostgreSQL
Full Text Search In PostgreSQL
 
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentos
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentosConceptos básicos. seminario web 3 : Diseño de esquema pensado para documentos
Conceptos básicos. seminario web 3 : Diseño de esquema pensado para documentos
 
JSON REST API for WordPress
JSON REST API for WordPressJSON REST API for WordPress
JSON REST API for WordPress
 
ElasticSearch in action
ElasticSearch in actionElasticSearch in action
ElasticSearch in action
 
Flexible site structure with cake php
Flexible site structure with cake phpFlexible site structure with cake php
Flexible site structure with cake php
 
The emerging world of mongo db csp
The emerging world of mongo db   cspThe emerging world of mongo db   csp
The emerging world of mongo db csp
 
Building your first app with MongoDB
Building your first app with MongoDBBuilding your first app with MongoDB
Building your first app with MongoDB
 
Basic PowerShell Toolmaking - Spiceworld 2016 session
Basic PowerShell Toolmaking - Spiceworld 2016 sessionBasic PowerShell Toolmaking - Spiceworld 2016 session
Basic PowerShell Toolmaking - Spiceworld 2016 session
 
TYPO3 Transition Tool
TYPO3 Transition ToolTYPO3 Transition Tool
TYPO3 Transition Tool
 
Php reports sumit
Php reports sumitPhp reports sumit
Php reports sumit
 
REST easy with API Platform
REST easy with API PlatformREST easy with API Platform
REST easy with API Platform
 

Último

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
tonesoftg
tonesoftgtonesoftg
tonesoftglanshi9
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile EnvironmentVictorSzoltysek
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in sowetomasabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 

Último (20)

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
tonesoftg
tonesoftgtonesoftg
tonesoftg
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

NoSQL store everyone ignored - Postgres Conf 2021