# Comparison of noSQL Nosql 首先都有一個 primary key 作為資料的索引 | id | data_address |---|--- | 1 | 1234 | 2 | 1235 NoSQL 有四種分別是 1. Document 2. Column-family 3. Key-value 4. Graph ## 1. Document (Mongodb) | id | name | gender | |---|---|---| | 1 | Jimmy | male | | 2 | Yvonne | female | 上面這種表示法沒有講到的是 name, gender 這個 metadata 是如何儲存的 但 Document 的方式是 ``` { "name": "Jimmy", "gender": "male" }, { "name": "Yvonne", "gender": "female" } ``` 也就是每一筆資料都會包含 column 的 metadata ### How data storage in disk 我的理解是 Mongodb 也不會真的將每一筆資料儲存成 OS 中的 file, 比如: ```bash -mongo ---user ---file1(Jimmy) ---file2(Yvonne) ``` 但後來看了這篇文章 [Mongodb 儲存原理](https://zhuanlan.zhihu.com/p/34248254) 才知道是 ```bash -mongo ---user.0 (Include Jimmy and Yvonne. Max size 16 MB) ---user.1 (Max size 32 MB) ---user.2 ``` 這是文章中的示意圖 ```bash ls -lh -rw------- 1 mongo mongo 16M 11 6 17:24 test.0 -rw------- 1 mongo mongo 32M 11 6 17:24 test.1 -rw------- 1 mongo mongo 64M 11 6 17:24 test.2 -rw------- 1 mongo mongo 128M 11 6 17:24 test.3 -rw------- 1 mongo mongo 256M 11 6 17:24 test.4 -rw------- 1 mongo mongo 512M 11 6 17:24 test.5 -rw------- 1 mongo mongo 512M 11 6 17:24 test.6 -rw------- 1 mongo mongo 16M 11 6 17:24 test.ns ``` ## 2. Column-family 這邊介紹一下 Cassandra 及 Bigtable Gcloud 有一份讓用戶快速理解 Cassandra 及 Bigtable API 差異的文件 https://codelabs.developers.google.com/codelabs/cbt-for-cassandra/index.html#0 ### 2.1 Cassandra https://holajiawei.com/cassandra-arch/ ### 2.2 Gcloud bigtable https://cloud.google.com/bigtable/docs/schema-design 若要設計 timeseries data, 可以將 timestamp 加進 row key 中 比如 user_id + timestamp ``` key value 123#1590328691 []byte 123#1590328692 []byte ```