pg.ddx.io  pgsql-performance@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Pierre C <lists@peufeu.com>
To: pgsql-performance@postgresql.org <pgsql-performance@postgresql.org>
Subject: Postgres NoSQL emulation
Date: Tue, 10 May 2011 19:56:03 +0200
Message-ID: <op.vu91fpoyeorkce@apollo13> (raw)


While reading about NoSQL,

> MongoDB let's you store and search JSON objects.In that case, you don't  
> need to have the same "columns" in each "row"

The following ensued. Isn't it cute ?

CREATE TABLE mongo ( id SERIAL PRIMARY KEY, obj hstore NOT NULL );
INSERT INTO mongo (obj) SELECT ('a=>'||n||',key'||(n%10)||'=>'||n)::hstore  
 FROM generate_series(1,100000) n;

SELECT * FROM mongo LIMIT 10;
  id |           obj
----+-------------------------
   1 | "a"=>"1", "key1"=>"1"
   2 | "a"=>"2", "key2"=>"2"
   3 | "a"=>"3", "key3"=>"3"
   4 | "a"=>"4", "key4"=>"4"
   5 | "a"=>"5", "key5"=>"5"
   6 | "a"=>"6", "key6"=>"6"
   7 | "a"=>"7", "key7"=>"7"
   8 | "a"=>"8", "key8"=>"8"
   9 | "a"=>"9", "key9"=>"9"
  10 | "a"=>"10", "key0"=>"10"

CREATE INDEX mongo_a ON mongo((obj->'a')) WHERE (obj->'a') IS NOT NULL;
CREATE INDEX mongo_k1 ON mongo((obj->'key1')) WHERE (obj->'key1') IS NOT  
NULL;
CREATE INDEX mongo_k2 ON mongo((obj->'key2')) WHERE (obj->'key2') IS NOT  
NULL;
VACUUM ANALYZE mongo;

SELECT * FROM mongo WHERE (obj->'key1')='271';
  id  |            obj
-----+---------------------------
  271 | "a"=>"271", "key1"=>"271"
(1 ligne)

EXPLAIN ANALYZE SELECT * FROM mongo WHERE (obj->'key1')='271';
                                                      QUERY PLAN
---------------------------------------------------------------------------------------------------------------------
  Index Scan using mongo_k1 on mongo  (cost=0.00..567.05 rows=513 width=36)  
(actual time=0.024..0.025 rows=1 loops=1)
    Index Cond: ((obj -> 'key1'::text) = '271'::text)
  Total runtime: 0.048 ms



view thread (4+ messages)  latest in thread

Message-ID: <op.vu91fpoyeorkce@apollo13>
Permalink:  ../op.vu91fpoyeorkce@apollo13/
Also on:    postgresql.org/message-id/op.vu91fpoyeorkce@apollo13

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-performance@postgresql.org
  Cc: lists@peufeu.com
  Subject: Re: Postgres NoSQL emulation
  In-Reply-To: <op.vu91fpoyeorkce@apollo13>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox