为设计 Instagram 问题寻找最佳数据库设计
Finding the best db design for design Instagram problem
我正在阅读 link 中给出的 post:
https://www.educative.io/courses/grokking-the-system-design-interview/m2yDVZnQ8lG。
我在理解数据库架构部分时遇到了很多困难:
现在,本节建议将照片的元数据存储在像 cassandra 这样的 nosql 存储中。
问题是:
- 参考下面的行,将列表存储在不同的列中到底是什么意思?
For the ‘UserPhoto’ table, the ‘key’ would be ‘UserID’, and the
‘value’ would be the list of ‘PhotoIDs’ the user owns, stored in
different columns.
- 虽然它建议使用 nosql 存储,但这对 rdbms 究竟有何用处?
我花了无数的时间来思考和搜索这两个问题。请帮忙。
... what exactly does it mean by that storing the list in different
columns?
我假设 table 架构类似于:
CREATE TABLE user_photos
userid text,
photoid int,
photopath varchar,
...
PRIMARY KEY (userid, photoid)
)
table 的 PRIMARY KEY
具有分区键 userid
和 photoid
作为集群列。这意味着 table 中的每条记录(由 userid
标识)将具有 photoid
的多个“行”(聚类列),因为每个用户可以有多张照片。
Cassandra 被称为宽列存储,因为数据存储在“宽列”中,这意味着列会根据需要重复一次或多次。为了使用上面的示例进行说明,下面是记录如何存储在磁盘上的表示:
+----------+-----------+-----------+-----+-----------+
| PK | Column 1 | Column 2 | ... | Column n |
+----------+-----------+-----------+-----+-----------+
| userid = | photoid = | photoid = | ... | photoid = |
| 'abc123' | 56789012 | 78901234 | ... | 90123456 |
+----------+-----------+-----------+-----+-----------+
每条记录可以有一列,也可以有一百列。这取决于用户有多少张照片。它不像传统的 RDBMS tables.
那样固定列数
While it recommends, using a nosql store, how exactly will this be useful over a rdbms?
NoSQL 数据库的许多用例无法在传统的二维 RDBMS tables 中建模(顶部的列 运行,底部的行 运行页)。
如上例所示,Cassandra既支持传统的二维table,也支持多维table。
但更重要的是,RDBMS 无法像 Cassandra 这样的数据库那样实现规模化。您可以在 Cassandra 集群中拥有数百或数千个节点,并且可以将节点分布在全球范围内。 NoSQL DB 和 Cassandra 中有许多 RDBMS 无法实现的特性和属性。干杯!
我正在阅读 link 中给出的 post: https://www.educative.io/courses/grokking-the-system-design-interview/m2yDVZnQ8lG。 我在理解数据库架构部分时遇到了很多困难:
现在,本节建议将照片的元数据存储在像 cassandra 这样的 nosql 存储中。
问题是:
- 参考下面的行,将列表存储在不同的列中到底是什么意思?
For the ‘UserPhoto’ table, the ‘key’ would be ‘UserID’, and the ‘value’ would be the list of ‘PhotoIDs’ the user owns, stored in different columns.
- 虽然它建议使用 nosql 存储,但这对 rdbms 究竟有何用处?
我花了无数的时间来思考和搜索这两个问题。请帮忙。
... what exactly does it mean by that storing the list in different columns?
我假设 table 架构类似于:
CREATE TABLE user_photos
userid text,
photoid int,
photopath varchar,
...
PRIMARY KEY (userid, photoid)
)
table 的 PRIMARY KEY
具有分区键 userid
和 photoid
作为集群列。这意味着 table 中的每条记录(由 userid
标识)将具有 photoid
的多个“行”(聚类列),因为每个用户可以有多张照片。
Cassandra 被称为宽列存储,因为数据存储在“宽列”中,这意味着列会根据需要重复一次或多次。为了使用上面的示例进行说明,下面是记录如何存储在磁盘上的表示:
+----------+-----------+-----------+-----+-----------+
| PK | Column 1 | Column 2 | ... | Column n |
+----------+-----------+-----------+-----+-----------+
| userid = | photoid = | photoid = | ... | photoid = |
| 'abc123' | 56789012 | 78901234 | ... | 90123456 |
+----------+-----------+-----------+-----+-----------+
每条记录可以有一列,也可以有一百列。这取决于用户有多少张照片。它不像传统的 RDBMS tables.
那样固定列数While it recommends, using a nosql store, how exactly will this be useful over a rdbms?
NoSQL 数据库的许多用例无法在传统的二维 RDBMS tables 中建模(顶部的列 运行,底部的行 运行页)。
如上例所示,Cassandra既支持传统的二维table,也支持多维table。
但更重要的是,RDBMS 无法像 Cassandra 这样的数据库那样实现规模化。您可以在 Cassandra 集群中拥有数百或数千个节点,并且可以将节点分布在全球范围内。 NoSQL DB 和 Cassandra 中有许多 RDBMS 无法实现的特性和属性。干杯!