0:http://cassandra.apache.org/doc/cql/CQL.html
Edit: I didn't realize Citus Data was making the columnar postgres offering open source...that's great!
0:http://cassandra.apache.org/doc/cql/CQL.html
Edit: I didn't realize Citus Data was making the columnar postgres offering open source...that's great!
Not to say there aren't tools to get SQL ontop of Cassandra (Datastax has a hadoop/mr driver, that you can probably put pig/hive/presto(?) on top of).
You can find a brief description of why and when you want actual columnar formats in the introduction section of this blog post: https://blog.twitter.com/2013/dremel-made-simple-with-parque... .
You can read more about columnar databases here: https://en.wikipedia.org/wiki/Column-oriented_DBMS
A columnar storage format for a database engine that does not have operations specifically tuned for vectorization and taking advantage of data being cheaply available a column chunk at a time instead of a row chunk at a time is only half the battle -- you can get massive perf wins on top of the work CitusDB did by doing things like operating on compressed data / delaying decompression, avoiding deserialization for column values based on a filtering scan of another column, pipelining operations on column values to fit better into your cpu architecture, etc.
But just having the IO wins is nice, too.
It's an unfortunate naming collision.
An analytic column store like say Vertica has a schema like a regular SQL database. I don't know what their flexible schema story is right now.
Instead of storing the columns of a row together an analytic column store will store columns from many rows together in sorted runs. When you go to do a scan your disk will only read the columns you have selected. The format for column storage is optimized for specific types and uses type specific compression so 10-50x is something that is claimed. This further improves the IO situation. They can also zero in on relevant ranges of data for each column because they are indexed and this further reduces the IO requirements.
Where other databases are bound on seeks or sequential throughput an analytic column store will be bound on CPU, especially CPU for the non-parallel portions of every query.
Obviously a column store will have a hard time selecting individual rows because the data is not stored together so it will be expensive to materialize. They also have trouble with updates/deletes to already inserted data, in some cases requiring the data be reloaded because updates have dragged everything down.
See http://wiki.apache.org/cassandra/ArchitectureSSTable
Analytic column stores can exploit storing columns separately by using various encoding schemes to compress data that are far superior to generalized compression and they can use the sort to zero on relevant ranges for each column.
Thanks for clearing that up!