我是DynamoDB和NoSQL世界的新手,尽管我已经购买并阅读了Alex DeBrie的DynamoDB书,但我仍然无法理解这一点。
场景:
我想用你按下的“酷”搜索创建一个应用程序
Ctrl
+
K
获得一个搜索模态,在搜索模态中,你可以键入任何内容,它会显示你的匹配项。看见
TailwindCSS's doc page
例如。
我的实体是
Organisation
和
Customer
他们之间有一种一对多的关系。一个组织有许多客户。
如果这是SQL,我会想象自己是这样的:
SELECT
*
FROM customers c
WHERE c.id LIKE '%search-term%'
OR c.first_name LIKE '%search-term%'
OR c.last_name LIKE '%search-term%'
OR c.date_of_birth LIKE '%search-term%'
OR c.phone_number LIKE '%search-term%'
OR c.post_code LIKE '%search-term%'
但在DynamoDB中,我不确定如何获得相同的功能。
当前型号:
到目前为止,我有以下内容:
这只允许我搜索
客户Id
。
有用信息:
一个组织可能有数千名客户,但假设平均而言,一个组织将有5万名客户,其中15K将是活跃的(即应在搜索中出现),非活跃的客户不应出现在搜索中,除非有要求。
我听到你问,用户将如何请求?我会有一些信息文本,上面写着:
放置
*
在搜索词前面还可以搜索不活跃的客户。
例如,最常见的客户查找方式是按名称查找
A Watson
,但他们当然也可以通过邮政编码进行搜索,例如。
ls11 3fd
(可以是小写或大写)。
我确实想搜索的属性是:
-
客户Id
-
客户名字
-
客户姓氏
-
客户出生日期
-
客户电话号码
-
客户邮编
客户实体将有20到30个属性,但为了搜索模式的目的,返回的结果将只有名字、姓氏、出生日期、指定的客户代表以及地址和邮政编码的第一行(因此有6个属性)。
到目前为止的想法:
-
为我想要搜索的每个属性创建一个GSI(在我的例子中是5个GSI)。
-
创建自己的索引。将客户添加到应用程序时,我插入
pk
像
search#org#1
以及
sk
像
byfirstname#Ray
,然后是我想要的其他属性,然后是具有相同属性的另一项
pk
但这次
sk
像
bylastname#Charles
等等
对于选项2,我必须记住在实体更新时更新项,我可以通过DynamoDB流和lambda调用来完成。
若我选择这个选项,我真的不确定我的DynamoDB查询会是什么样子!
在给出上述信息的情况下,我如何对表格进行建模?