1,556 karma · joined April 4, 2009
PGStrom uses the GPU: https://wiki.postgresql.org/wiki/PGStrom
PGOpenCL: http://wiki.postgresql.org/images/6/65/Pgopencl.pdf
PostgreSQL excels at heavy OLTP-type workloads; the MVCC architecture means that readers don't block writers, and writers don't block readers. But there is quite a lot of overhead for every row, and the query architecture is tuple-at-a-time, with lots of function calls. This means that OLAP workloads can be slow, compared to column store DBs like Vertica, MonetDB etc.
So it's impressive, but it isn't a performance improvement for core PostgreSQL, or data stored natively in PostgreSQL (in particular, cstore_fdw is not very flexible - from the README for that project: "Note. We currently don't support updating table using INSERT, DELETE, and UPDATE commands.")
The "associative" in associative array implies association is a property of the data structure, not the way you happen to be using it.
CREATE OR REPLACE FUNCTION get_people()
RETURNS person[] LANGUAGE sql AS
person is a composite type, defined further up. The square brackets indicate an array of that type.That's not an associative array, it's just an array of a composite type. The hstore type is probably the closest you'd get to an associate array in PostgreSQL, but the keys and values are always strings.
Again, very basic PoC.
Do bear in mind that you'll never get MongoDB-style in-place updates in PostgreSQL, due to MVCC. You may save a round-trip with the entire JSON object once they implement update operators, though.
[1] http://en.wikipedia.org/wiki/Hierarchical_database_model
Also contains some comparisons with MongoDB.
"... later versions will include a complete range of workloads (including deleting, updating, appending, and complex select operations) and they will also evaluate multi-server configurations."
Any update in PostgreSQL will result in a new tuple being inserted, whether it contains json, hstore or anything else; that's the basis of multi-version concurrency control. It'll be the same deal with jsonb.
Not only that, the delta to update the page to contain the new tuple, and a copy of the full page the tuple is being written to (if it's the first change to that page in that checkpoint cycle) are written to the write-ahead log.
I'd rather spend more time understanding things up-front and have a reliable solution rather than flick a switch and have something which initially works but I'm not too confident in. That's fine for initial development I suppose, but not in production.
2ndQuadrant have developed Bi-Directional Replication for 9.4 (http://2ndquadrant.com/en/resources/bdr/, https://wiki.postgresql.org/wiki/BDR_User_Guide) based on the aforementioned logical changeset support in 9.4.
The issue with PL/Python is that it's nigh on impossible to properly sandbox Python.
[1] http://www.postgresql.org/docs/9.3/static/plperl-trusted.htm...
The whole point of btree indexes is that they're efficient to query from disk.
Why does that make this article suspicious? Obviously they stand to benefit from more people using PostgreSQL, but they've been exceedingly clear with their methodology - their benchmark is available on Github: https://github.com/EnterpriseDB/pg_nosql_benchmark.
In particular it's in-process and does UDFs.
Admittedly it isn't open-source but it is free for non-commercial use.