为正在协作的每个对象创建一个新容器是否是一种反模式?
Is it an anti-pattern to create a new container for each object that is being collaborated upon?
我们正在构建一个使用 Fluid Framework 的应用程序,该应用程序会在用户第一次“打开”editing/viewing 的应用程序对象时创建一个带有共享矩阵的新容器。 “打开”该对象的后续用户将加载第一个用户创建的现有容器。有很多(超过 1000 个)不同的对象(即不同的 id 值)可以同时打开,每个对象都由一定数量的不同用户协作。
为每个对象创建一个容器是否是一种反模式?或者我们应该探索使用更少的容器(例如,一个容器用于所有对象,或者一个容器用于每 5 个对象)?
我觉得每个对象都有一个容器是有意义的,因为如果容器包含多个对象的共享矩阵,那么客户端将不必要地下载额外的数据,因为只会使用一个共享矩阵(即适用于“打开”的对象的共享矩阵。
话虽这么说,但我们担心流体服务中容器的生命周期,how/if大量容器(以及内存)最终会累积在流体服务中,我们认为这会影响我们扩展和支持大量并发协作会话的能力。
奖金问题:
- 容器最终会在某个时候自动“清理”吗?
- 是否可以通过流体服务手动 remove/delete 容器?
- 有什么办法可以知道流式服务中目前有多少容器?
感谢阅读!
Is it an anti-pattern to create one container per object? Or should we explore using less containers (eg. one container for all objects, or one container for every 5 objects)?
我不确定这是不是反模式,但我认为没有必要。我认为更好的方法可能是使用 DataObject 作为用户加载的内容。换句话说,将使用 SharedMatrix 的业务逻辑包装在 DataObject 中。
该 DataObject 的实例将由框架按需加载。换句话说,我们通过在请求时按需加载数据对象来虚拟化数据模型。该调用请求一个 DataObject(ex root),但 DataObject 的加载由 Fluid 运行时本身拥有。
但是请注意,目前无法卸载 DataObject——只能卸载 Container。 DataObjects 的生命周期在 Framework 的控制之下。
如果您使用此模型,那么您仍然可以根据需要创建多个容器。但您也可以将容器重新想象为“object selection”UX。 IE。用户访问容器并查看容器中的所有对象,当它们 select 一个时,加载该 DataObject(即 SharedMatrix 和伴随的业务逻辑)。
对于您的其他问题,您所指类型的容器管理特定于服务实现。对于 Azure Fluid Relay,您可以使用 Azure CLI 列出和管理容器:
https://docs.microsoft.com/azure/azure-fluid-relay/how-tos/container-deletion.
我们正在构建一个使用 Fluid Framework 的应用程序,该应用程序会在用户第一次“打开”editing/viewing 的应用程序对象时创建一个带有共享矩阵的新容器。 “打开”该对象的后续用户将加载第一个用户创建的现有容器。有很多(超过 1000 个)不同的对象(即不同的 id 值)可以同时打开,每个对象都由一定数量的不同用户协作。
为每个对象创建一个容器是否是一种反模式?或者我们应该探索使用更少的容器(例如,一个容器用于所有对象,或者一个容器用于每 5 个对象)?
我觉得每个对象都有一个容器是有意义的,因为如果容器包含多个对象的共享矩阵,那么客户端将不必要地下载额外的数据,因为只会使用一个共享矩阵(即适用于“打开”的对象的共享矩阵。
话虽这么说,但我们担心流体服务中容器的生命周期,how/if大量容器(以及内存)最终会累积在流体服务中,我们认为这会影响我们扩展和支持大量并发协作会话的能力。
奖金问题:
- 容器最终会在某个时候自动“清理”吗?
- 是否可以通过流体服务手动 remove/delete 容器?
- 有什么办法可以知道流式服务中目前有多少容器?
感谢阅读!
Is it an anti-pattern to create one container per object? Or should we explore using less containers (eg. one container for all objects, or one container for every 5 objects)?
我不确定这是不是反模式,但我认为没有必要。我认为更好的方法可能是使用 DataObject 作为用户加载的内容。换句话说,将使用 SharedMatrix 的业务逻辑包装在 DataObject 中。
该 DataObject 的实例将由框架按需加载。换句话说,我们通过在请求时按需加载数据对象来虚拟化数据模型。该调用请求一个 DataObject(ex root),但 DataObject 的加载由 Fluid 运行时本身拥有。
但是请注意,目前无法卸载 DataObject——只能卸载 Container。 DataObjects 的生命周期在 Framework 的控制之下。
如果您使用此模型,那么您仍然可以根据需要创建多个容器。但您也可以将容器重新想象为“object selection”UX。 IE。用户访问容器并查看容器中的所有对象,当它们 select 一个时,加载该 DataObject(即 SharedMatrix 和伴随的业务逻辑)。
对于您的其他问题,您所指类型的容器管理特定于服务实现。对于 Azure Fluid Relay,您可以使用 Azure CLI 列出和管理容器:
https://docs.microsoft.com/azure/azure-fluid-relay/how-tos/container-deletion.