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 Solr
Erik Hatcher
 
20130310 solr tuorial
20130310 solr tuorial20130310 solr tuorial
20130310 solr tuorial
Chris Huang
 
Solr Application Development Tutorial
Solr Application Development TutorialSolr Application Development Tutorial
Solr Application Development Tutorial
Erik 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

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

Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Lisi Hocke
 

Último (20)

BusinessGPT - Security and Governance for Generative AI
BusinessGPT  - Security and Governance for Generative AIBusinessGPT  - Security and Governance for Generative AI
BusinessGPT - Security and Governance for Generative AI
 
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
 
Community is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea GouletCommunity is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea Goulet
 
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
 
Workshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit Milan
Workshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit MilanWorkshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit Milan
Workshop: Enabling GenAI Breakthroughs with Knowledge Graphs - GraphSummit Milan
 
Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?
 
Encryption Recap: A Refresher on Key Concepts
Encryption Recap: A Refresher on Key ConceptsEncryption Recap: A Refresher on Key Concepts
Encryption Recap: A Refresher on Key Concepts
 
Evolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI EraEvolving Data Governance for the Real-time Streaming and AI Era
Evolving Data Governance for the Real-time Streaming and AI Era
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
 
Test Automation Design Patterns_ A Comprehensive Guide.pdf
Test Automation Design Patterns_ A Comprehensive Guide.pdfTest Automation Design Patterns_ A Comprehensive Guide.pdf
Test Automation Design Patterns_ A Comprehensive Guide.pdf
 
Transformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with LinksTransformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with Links
 
Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...
Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...
Abortion Clinic In Pongola ](+27832195400*)[ 🏥 Safe Abortion Pills In Pongola...
 
GraphSummit Milan - Neo4j: The Art of the Possible with Graph
GraphSummit Milan - Neo4j: The Art of the Possible with GraphGraphSummit Milan - Neo4j: The Art of the Possible with Graph
GraphSummit Milan - Neo4j: The Art of the Possible with Graph
 
Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024Modern binary build systems - PyCon 2024
Modern binary build systems - PyCon 2024
 
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
CERVED e Neo4j su una nuvola, migrazione ed evoluzione di un grafo mission cr...
 
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
Wired_2.0_CREATE YOUR ULTIMATE LEARNING ENVIRONMENT_JCON_16052024
 
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
 
Your Ultimate Web Studio for Streaming Anywhere | Evmux
Your Ultimate Web Studio for Streaming Anywhere | EvmuxYour Ultimate Web Studio for Streaming Anywhere | Evmux
Your Ultimate Web Studio for Streaming Anywhere | Evmux
 
The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)
 

NoSQL store everyone ignored - Postgres Conf 2021