语境
当我研究DynamoDB时,由于我在关系数据库中的背景,我很难理解其建模和用例。我找不到比较DynamoDB和MongoDB之间差异的内容。由于MongoDB是我唯一熟悉的NOSQL数据库,因此我带来了基准和用例。 DynamoDB和MongoDB是两个NOSQL数据库,在特定情况下,它们之间存在一些关键差异,使数据结构和用例更好。
用例
DynamoDB:
他的实时数据系统已知,使自己值得需要高阅读能力的应用程序。
示例:社交媒体和数据分析。
Mongodb:
是需要在数据架构和复杂查询中更灵活的应用程序的一个不错的选择,这是一个很好的示例的业务规则:电子商务或任何业务规则发生巨大变化的项目
模型建模:
假设我有一个通用的商店业务规则,每个数据库的建模将是:
MongoDB模式:
db.createCollection("products")
{
"name": "string",
"description": "string",
"price": "number",
}
db.createCollection("order")
{
"id": "string",
"datetime": "string",
"itens": [
{
"productName": "string",
"quantity": "number",
"price": "number"
}
]
}
DynamoDB模式:
{
"products": {
"name": "string",
"description": "string",
"price": "number",
},
"order": {
"id": "string",
"datetime": "string",
"itens": [
{
"productName": "string",
"quantity": "number",
"price": "number"
}
]
}
}
正如我们所看到的,在Mongo中,我们有两个集合(或表),而在DynamoDB中,我们只有一个具有不同类型的数据和业务环境的表。使用单个表的这种方法称为“宽表”,它允许公司在同一表中存储具有不同属性集的多种类型的数据项。与多桌子建模相比,这种方法可以帮助简化应用程序逻辑并降低数据管理的复杂性。
这是有关仅使用一张表的艺术的推荐文章:https://www.alexdebrie.com/posts/dynamodb-single-table/
索引
定义
简单地说,索引是表格中数据的指针。数据库中的索引与书背面的索引非常相似。
它们是在数据库背景中用于加快查询的功能强大的工具,它们通过提供一种方法来快速查找请求的数据来供电。
重要的是要注意,创建索引可能会对写作性能和存储要求产生影响,因此,仔细选择根据最频繁执行的查询来创建的索引很重要
注意:索引可能会影响成本,因为它们需要额外的读写能力单元。
DynamoDB上的索引:
可以提供以下功能:
全球次要索引
是一种包含分区键的索引,与基础表的主键不同。它被称为“全局”次级索引,因为该索引上的查询可以从基表的多个分区访问数据。
本地次要索引
这些索引允许开发人员以简单的行创建灵活地访问宽表中数据的灵活访问:执行与表的主键不匹配的查询,而不会影响性能和可伸缩性
Mongodb:
单场索引:
单个字段索引仅包含集合中文档单个字段的数据。
复合索引
一个化合物索引包含一个以上的文档字段。
Multikey索引:
多基索引是数组字段上的索引,为数组中的每个值添加了一个索引密钥。
地理空间索引和查询:
支持基于位置的搜索数据,该搜索存储为Geojson对象或遗产坐标对。
文本索引:
支持文档中字符串内容的搜索。
哈希索引:
保持索引字段值的哈希条目,主要用于碎片簇以支持shard键键。
mongoDB可以具有倍数索引,用于通过减少文档数量来提高数据库查询的性能。
来源:( https://codecademy.com/article/sql-indexes; https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html; https://www.mongodb.com/docs/)