如果我对每个 webapi 请求使用 Docoument DB c# SDK 的 CreateDocumentCollectionIfNotExistsAsync,它会影响性能吗
Does it affect the performance If I use CreateDocumentCollectionIfNotExistsAsync of Docoument DB c# SDK for every webapi request
我们有多租户应用程序,出于各种原因,我们需要为每个租户收集数据。我们计划对一个 webapi 服务的每个请求使用 CreateDocumentCollectionIfNotExistsAsync,预计会有大量点击。如果我使用此方法而不对创建的集合进行任何类型的缓存,它会对性能产生影响吗?
如果您必须为每个 webapi 请求调用此 API,那么集合(链接)的缓存显然会更好。但是,每当新集合 added/deleted 时,您就必须维护此缓存。我不确定您将如何有效地管理它。
在一个好的设计中,您不会为每个 Web 请求创建 database/collection,而是将它们 pre-created 作为某些初始化方法的一部分,并且您只是在假设它们存在的情况下发出请求。如果任何请求失败(比如集合被删除),您可以适当地处理此异常并在这种情况下创建一个新集合。
另请注意,这些集合读取不计入您在集合中配置的 RU,因为这是 "master" 操作而不是 "server" 操作。主操作包括数据库 CRUD 和集合 CRUD,并在您的数据库帐户级别分配一个固定的 RU(以几百个 RU 为单位)。您的所有文档请求都计入服务器操作,它们使用您在收集级别指定的 RU。
所以我不建议您对每个 webapi 请求都使用这个 API。
如果您必须有选择地使用它(在初始化期间或在任何特殊情况下),请使用 1.11.1 中的 CreateDocumentCollectionIfNotExistsAsync API 版本,该版本将 DatabaseUri 作为输入以获得最佳性能。它所做的唯一 "extra" 调用是在调用 CreateDocumentCollectionAsync 之前调用 ReadDocumentCollectionAsync,这就是此 API 的目的。
我们有多租户应用程序,出于各种原因,我们需要为每个租户收集数据。我们计划对一个 webapi 服务的每个请求使用 CreateDocumentCollectionIfNotExistsAsync,预计会有大量点击。如果我使用此方法而不对创建的集合进行任何类型的缓存,它会对性能产生影响吗?
如果您必须为每个 webapi 请求调用此 API,那么集合(链接)的缓存显然会更好。但是,每当新集合 added/deleted 时,您就必须维护此缓存。我不确定您将如何有效地管理它。
在一个好的设计中,您不会为每个 Web 请求创建 database/collection,而是将它们 pre-created 作为某些初始化方法的一部分,并且您只是在假设它们存在的情况下发出请求。如果任何请求失败(比如集合被删除),您可以适当地处理此异常并在这种情况下创建一个新集合。
另请注意,这些集合读取不计入您在集合中配置的 RU,因为这是 "master" 操作而不是 "server" 操作。主操作包括数据库 CRUD 和集合 CRUD,并在您的数据库帐户级别分配一个固定的 RU(以几百个 RU 为单位)。您的所有文档请求都计入服务器操作,它们使用您在收集级别指定的 RU。
所以我不建议您对每个 webapi 请求都使用这个 API。
如果您必须有选择地使用它(在初始化期间或在任何特殊情况下),请使用 1.11.1 中的 CreateDocumentCollectionIfNotExistsAsync API 版本,该版本将 DatabaseUri 作为输入以获得最佳性能。它所做的唯一 "extra" 调用是在调用 CreateDocumentCollectionAsync 之前调用 ReadDocumentCollectionAsync,这就是此 API 的目的。