Is Cassandra a column oriented or columnar database

时光怂恿深爱的人放手 提交于 2019-11-29 08:45:25

问题


Columnar database should store group of columns together. But Cassandra stores data row-wise. SS Table will hold multiple rows of data mapped to their corresponding partition key. So I feel like Cassandra is a row wise data store like MySQL but has other benefits like "wide rows" and every columns are not necessarily to be present for all the rows and of course it's in memory . Please correct me if I'm wrong.


回答1:


If you go to the Apache Cassandra project on GitHub, and scroll down to the "Executive Summary," you will get your answer:

Cassandra is a partitioned row store. Rows are organized into tables with a required primary key.

Partitioning means that Cassandra can distribute your data across multiple machines in an application-transparent matter. Cassandra will automatically repartition as machines are added and removed from the cluster.

Row store means that like relational databases, Cassandra organizes data by rows and columns.

"So I feel like Cassandra is a row wise data store"

And that would be correct.




回答2:


  • In a Column oriented or a columnar database data are stored on disk in a column wise manner.

    e.g: Table Bonuses table

     ID         Last    First   Bonus
     1          Doe     John    8000
     2          Smith   Jane    4000
     3          Beck    Sam     1000
    
  • In a row-oriented database management system, the data would be stored like this: 1,Doe,John,8000;2,Smith,Jane,4000;3,Beck,Sam,1000;

  • In a column-oriented database management system, the data would be stored like this:
    1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000;

  • Cassandra is basically a column-family store

  • Cassandra would store the above data as, "Bounses" : { row1 : { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000}, row2 : { "ID":2, "Last":"Smith", "Jane":"John", "Bonus":4000} ... }
  • Vertica, VectorWise, MonetDB are some column oriented databases that I've heard of.

  • Read this for more details.

Hope this helps.




回答3:


A good way of thinking about cassandra is as a map of maps, where the inner maps are sorted by key. A partition has many columns, and they are always stored together. They are sorted by clustering keys - first by the first key, then the next, then next...and so on. Partitions are then replicated amongst replicas. It's not necessarily stored as "rows" as different rows are stored on different nodes based on replication strategy and active hashing algorithm. In other words, a partition for ProductId 1 is likely not stored next to ProductId 2 if ProductId is the partition key. However the coloumns for Product Id 1, are always stored together.

As for definitions, most NoSQL stores are blurring the lines one way or the other. They usually span multiple categories. I'll leave it up to you to decide whether this qualifies as a columnar database or not :)



来源:https://stackoverflow.com/questions/25441921/is-cassandra-a-column-oriented-or-columnar-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!