【问题标题】:Data structure for activity feed活动提要的数据结构
【发布时间】:2018-02-06 09:53:45
【问题描述】:

我们的应用程序中有一个工作区的概念。一个用户几乎可以是任意数量的工作区的成员,并且一个工作区几乎可以有任意数量的用户。我想实现一个活动提要,以帮助用户找出他们所属的每个工作区中发生的事情,即当有人上传文件或在工作区中创建任务时,此活动会出现在该工作区的活动提要以及每个工作区中其用户活动提要。问题是我无法为活动的快速读写操作提供合适的数据结构。我想出的是使用属性Targets 存储每个活动,该属性是所有工作区的用户 ID 的字符串,然后过滤该字段包含我要为其获取活动的用户的 ID 的活动,但这种方法有严重的性能和可扩展性限制,因为我们使用 SharePoint 作为我们的存储。我们也可以使用 Azure 表或 Blob 存储,我想为工作区的每个用户创建一个单独的活动实体,这样我就可以轻松地按用户 ID 过滤活动,但这可能会导致数百个相同的副本如果一个工作区有数百个成员,然后编写所有这些副本就会出现问题,因为 Azure 在单个批处理操作中仅支持 100 个实体(如果我错了,请纠正我),然后 SharePoint 根本不是一个选项。所以我需要帮助找出我可以使用什么数据结构来存储每个工作区的活动,以便任何成员都可以通过其 ID 轻松检索它们,也可以通过工作区的 ID 轻松检索任何工作区。

【问题讨论】:

    标签: data-structures database-design sharepoint-2013 azure-blob-storage azure-table-storage


    【解决方案1】:

    我们还可以使用 Azure 表或 Blob 存储,我想为工作区的每个用户创建一个单独的活动实体,这样我就可以轻松地按用户 ID 过滤活动

    Azure 存储表可以作为存储活动实体的选择,并且表存储相对便宜,您可以考虑将同一实体多次(使用不同的分区策略)存储在单独的分区或单独的表中以提高读取效率。

    使用workspaceid_userid 作为复合键存储用户的活动实体也是一种可能的方法。更多详细的Table设计模式请参考this article

    Azure 仅支持单个批处理操作中的 100 个实体(如果我错了,请纠正我)

    是的,一个 batch operation 最多可以包含 100 个实体。

    【讨论】:

    • 但是如果一个工作空间可以有几乎任意数量的成员,即 1000 个(虽然我怀疑这是否会发生,但仍然),插入 1000 个具有不同 @987654324 的相同实体不是很愚蠢@s,这还需要执行 10 个单独的批处理请求?我不是说它是,而是我在问,因为我只有使用关系(主要是 SQL)数据库的经验,而这种方法会被认为是疯狂的。
    • 每次需要保存用户的activity实体,如果使用第一种方式,可能需要将activity实体存储两次(以userid作为PartitionKey存储,并存储相同的activity实体workspaceid 作为 PartitionKey)。
    • 然后我如何通过单个查询从用户所属的所有工作区获取活动?我的意思是一个用户可以是 10 个工作空间的成员。这些工作区中的其他用户发布了一些活动。我使用userIdworkspaceId 将每个活动存储两次为PartitionKeys。那么我如何通过一个查询从这 10 个工作区中检索所有这些活动?
    猜你喜欢
    • 2011-01-06
    • 1970-01-01
    • 2012-11-18
    • 2011-03-31
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多