gpt4 book ai didi

mysql - 键值存储上的关系类型操作

转载 作者:可可西里 更新时间:2023-11-01 11:22:45 28 4
gpt4 key购买 nike

在我的对象表中有

id | type | parent | order | created

然后在我的数据表中有

object_id | key | value

我想以尽可能最佳的方式获取类型为“x”的对象,其中键“y”===“z”。

即。让用户在哪里 slug === 'jonny'

我目前正在使用连接来做这件事,因为我在 mysql 中这样做是为了快速测试。但我将转向 Redis 或类似的键/值存储系统,所以显然这行不通。

最佳答案

您不能将关系模型调整或转换为键值存储:您需要从术语或结构以及访问路径的角度重新考虑您的数据模型。

在你的例子中,对于 redis,我会使用:

  • 每个包含静态(类型、父级、顺序、创建)和动态(您存储在数据表中的那些)属性的对象一个散列

  • 每类对象一组来索引对象类型

  • 您需要搜索的每个属性值一组

使用无模式键值存储,无需像使用 MySQL 那样分离静态和动态属性。

搜索可以通过交叉集来完成。集合必须手动维护(即每次添加/删除对象时,都需要更新相应的集合)。

获得搜索结果后,可以通过流水线化几个 hgetall 命令或使用 sort 命令来检索相应的对象属性。

示例:

# Add 3 objects and their properties
hmset obj:1 type user parent nil order 1 created 20120901 key_slug jonny key_tag dummy key_author Bob
hmset obj:2 type user parent nil order 2 created 20120901 key_slug jonny key_tag not_dummy key_author Dan
hmset obj:3 type admin parent nil order 3 created 20120901

# Add type index
sadd type:user 1 2
sadd type:admin 3

# Add dynamic properties indexes
sadd key_slug:jonny 1 2
sadd key_tag:dummy 1
sadd key_tag:not_dummy 2
sadd key_author:Bob 1
sadd key_author:Dan 2

# Find objects whose type is user, author is Bob and slug is jonny
sinter type:user key_author:Bob key_slug:jonny

# Find properties of object 1
hgetall obj:1

关于mysql - 键值存储上的关系类型操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12260654/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com