nic*_*icq 12 database amazon-web-services nosql amazon-dynamodb
我想存储一些与某些父对象相关的项目列表.
父对象如下:
user_id - hash key
timestamp - range key
attributeA - String
attributeB - Number
listC - List of objects
Run Code Online (Sandbox Code Playgroud)
listC是一个对象列表(如JSON),其中每个对象可以有几个字段:
attrX - number
attrY - string
attrZ - string
Run Code Online (Sandbox Code Playgroud)
列表的大小可以变化,从几个元素到hundreads.
我应该如何存放它们?
由于DynamoDB的限制,我担心我不能将此列表保留为父对象的属性.我想将这些列表移到另一个表中.但是,我不确定我是否应该:
方法(1):
-------------------------------------
| parent_id | attrX | attrY | attrZ |
-------------------------------------
| 178 | 2 | "abc" | "xyz" |
-------------------------------------
| 178 | 2.4 | "klm" | "qwe" |
-------------------------------------
Run Code Online (Sandbox Code Playgroud)
方法(2):
------------------------------------------------------------------------
| parent_id | Chunk | ListC |
------------------------------------------------------------------------
| 178 | 1 | [{ X: "2", Y: "abc" }, { X: "2.4", Y: "klm" } ] |
-------------------------------------------------------------------------
| 178 | 2 | [{ X: "2.8", Y: "nop" }, { X: "3.2", Y: "qrs" } ] |
------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
你会推荐我什么?
实际上,该方法取决于查询访问模式(QAP).
方法1: -
典型的标准化方法,类似于RDBMS设计.但是,我们需要从NoSQL角度考虑这个问题.有没有参加在DynamoDB.可能您可能需要读取两个表来获取所需的数据.请注意,费用是根据读取容量单位计算的.因此,两个不同的读取将花费你.
如果项目大小超过DynamoDB项目大小400 KB,则可以接受此方法
您可以编写查询表达式以按属性attrX,attrY和attrZ过滤数据,因为它们存储为普通标量数据类型属性
方法2: -
首选的NoSQL方法将所有必需的数据保存在一个表中.不需要加入或额外阅读
需要考虑项目大小是否超过400 KB
是否需要编写查询以按属性attrX,attrY和attrZ过滤数据.请注意,在此方法中,ListC数据存储为Map DynamoDB数据类型的列表.在大多数情况下,DynamoDB没有灵活性来查询这样的复杂数据结构(即List内部的数据类型)
对象列表 - 表示DynamoDB数据库上的Map列表
{X:"2.8",Y:"nop"} - 是对象.这转换为DynamoDB数据库上的MAP数据类型.
外部方括号转换为DynamoDB上的LIST数据类型
| 归档时间: |
|
| 查看次数: |
8231 次 |
| 最近记录: |