- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
以发布任务为主要目的,显示为“待办事项”或“已完成”,如何更好地构建包含以下对象的 NoSQL 数据库:
用户可以发布无限数量的任务,任务可以在用户之间共享。如何最好地捕捉这种关系?
任务可以手动“标记为完成”,或者“自动标记”和“自动移动到完成”,因为截止日期时间已过。
编辑和删除也将被记录下来。
作为起点,以下架构的优点和/或缺点是什么(主要关注可扩展性):
{
"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/
我是一名优秀的程序员,十分优秀!