gpt4 book ai didi

mongodb - 对于 MongoDB 的待办事项列表模式设计有何建议?

转载 作者:可可西里 更新时间:2023-11-01 10:32:43 25 4
gpt4 key购买 nike

以发布任务为主要目的,显示为“待办事项”或“已完成”,如何更好地构建包含以下对象的 NoSQL 数据库:

  • 创建日期不为空
  • 任务 ID 不为空
  • 作为 Str 的任务 ID Not Null
  • 任务标题不为空
  • 任务描述
  • 到期时间和/或日期
  • 用户不为空
    • ID 不为空
    • ID 为 Str Not Null
    • 名称​​不为空
    • 用户名不为空
    • 地点
    • 联系人数量
    • 创建日期不为空
    • UTC 偏移量不为空
    • 时区不为空
    • 地理启用不为空
    • 已验证
    • 任务计数不为空
    • 语言不为空
  • 地理位置
    • 坐标
    • 地点
  • 与谁分享
    • ?
  • 任务状态
    • 标记为完成
    • 自动移动到完成(因为 datetime-due 已通过)
    • 已标记(真/假)
    • 已编辑
    • 编辑次数
    • 编辑日期时间
    • 已删除

用户可以发布无限数量的任务,任务可以在用户之间共享。如何最好地捕捉这种关系?

任务可以手动“标记为完成”,或者“自动标记”和“自动移动到完成”,因为截止日期时间已过。

编辑和删除也将被记录下来。

作为起点,以下架构的优点和/或缺点是什么(主要关注可扩展性):

{
"created_at":"Day Mon ## 00:00:00 +0000 20##",
"id":#####,
"id_str":"#####",
"title":"This is a title",
"description":"The description goes here..",
"date_due":"Day Mon ## 00:00:00 +0000 20##",
"user":{
"id":####,
"id_str":"####",
"name":"Full Name",
"user_name":"Username",
"location":"",
"contacts_count":101,
"created_at":"Day Mon ## 00:00:00 +0000 20##",
"utc_offset":####,
"time_zone":"Country",
"geo_enabled":true,
"verified":false,
"task_count":101,
"lang":"en",
},
"geo":?,
"coordinates":?,
"place":?,
"shared_with":?,
"moved_done":false,
"marked_done":false,
"edited":false,
"deleted":false,
}

最佳答案

Edits & Deletes are to be recorded as well.

您是否只需要知道任务已更改,而不是如何更改或由谁更改?

否则,这可能需要版本控制,即对于每个 Task 都可以有多个 TaskVersions。或者,您可以仅存储修改 - 这取决于您的需要。特别是,由于锁定,拥有许多编写者并不容易——如果两个人试图“同时”更改同一个对象怎么办?您可能需要考虑乐观与悲观锁定或 mvcc。请注意,必须仔细设计“任务可以在用户之间共享”要求。

As a starting place, what are the upsides &/or downsides of the following schema (with scalability a prime focus):

我猜 user 指的是登录的用户。我不会对该信息进行反规范化。假设用户创建了一千个任务并添加了一个新联系人。现在必须更新 1000 个文档的 contacts_count 否则会出错。只对真正需要的东西进行反规范化,例如用户名

根据您显示的列表类型,您还可以选择仅存储用户 ID,并在需要显示用户名时实际获取用户对象。虽然不支持复杂的联接,但对 50 或 100 个 ID 执行 $in 查询(就像您必须在任务列表中查询一样)非常快。

关于mongodb - 对于 MongoDB 的待办事项列表模式设计有何建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19216689/

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