From d464a4f3e6bfd95badddf1233ea301e238855e10 Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 12:46:39 +0300 Subject: [PATCH 1/8] Remove GDPR include from multitenant doc Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- data-explorer/multi-tenant.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/data-explorer/multi-tenant.md b/data-explorer/multi-tenant.md index 301c4a1ea7..d4e599480b 100644 --- a/data-explorer/multi-tenant.md +++ b/data-explorer/multi-tenant.md @@ -73,9 +73,7 @@ The characteristics of this architecture are: * **Provisioning a new tenant**: Provisioning a new tenant doesn't require any database creation or schema adjustment. The new **tenant ID** is used in new records. -* **Removing a tenant**: Requires a [soft delete](/kusto/concepts/data-soft-delete?view=azure-data-explorer&preserve-view=true) or [purge](/kusto/concepts/data-purge?view=azure-data-explorer&preserve-view=true) of the tenant's data. A soft delete is more efficient, while purge supports GDPR obligations. You can batch multiple purges together, for example, at the end of week to limit the impact on resource consumption. - - [!INCLUDE [gdpr-intro-sentence](includes/gdpr-intro-sentence.md)] +* **Removing a tenant**: Requires a [soft delete](/kusto/concepts/data-soft-delete?view=azure-data-explorer&preserve-view=true) or [purge](/kusto/concepts/data-purge?view=azure-data-explorer&preserve-view=true) of the tenant's data. You can batch multiple purges together, for example, at the end of week to limit the impact on resource consumption. * **Database schemas updates**: All tenants' schema are upgraded at the same time. Since all tenants share table, changing table schemas changes all tenants at once. From 982e758c13b0f27d92b5d3bea38addc8fcb2d49b Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 14:14:36 +0300 Subject: [PATCH 2/8] create includes file; update artwork --- .../includes/cross-repo/multitenancy.md | 96 ++++++++++++++++++ .../multitenant/one-db-for-many-tenants.png | Bin 0 -> 33460 bytes .../media/multitenant/one-tenant-per-db.png | Bin 0 -> 29356 bytes .../multitenant/one-tenant-per-table.png | Bin 0 -> 22009 bytes .../multitenant/one-db-for-many-tenants.png | Bin 20697 -> 0 bytes .../media/multitenant/one-tenant-per-db.png | Bin 26444 -> 0 bytes .../multitenant/one-tenant-per-table.png | Bin 17058 -> 0 bytes data-explorer/multi-tenant.md | 92 +---------------- 8 files changed, 97 insertions(+), 91 deletions(-) create mode 100644 data-explorer/includes/cross-repo/multitenancy.md create mode 100644 data-explorer/includes/media/multitenant/one-db-for-many-tenants.png create mode 100644 data-explorer/includes/media/multitenant/one-tenant-per-db.png create mode 100644 data-explorer/includes/media/multitenant/one-tenant-per-table.png delete mode 100644 data-explorer/media/multitenant/one-db-for-many-tenants.png delete mode 100644 data-explorer/media/multitenant/one-tenant-per-db.png delete mode 100644 data-explorer/media/multitenant/one-tenant-per-table.png diff --git a/data-explorer/includes/cross-repo/multitenancy.md b/data-explorer/includes/cross-repo/multitenancy.md new file mode 100644 index 0000000000..40dba4162e --- /dev/null +++ b/data-explorer/includes/cross-repo/multitenancy.md @@ -0,0 +1,96 @@ +--- +ms.topic: include +ms.date: 05/12/2026 +--- + +The concept of multi-tenancy in Azure Data Explorer refers to serving different tenants and storing their data in a single cluster. + +> [!IMPORTANT] +> +> A multitenant solution can also be architected in Microsoft Fabric's [Real-Time Intelligence](/fabric/real-time-intelligence/overview) workload, using KQL databases inside an [Eventhouse](/fabric/real-time-intelligence/eventhouse). + +A *tenant* can represent a customer, a group of users, or any classifications of users where data needs to be segregated along the tenants' boundaries. You can also have multi-level multi-tenancy scenario, such as multiple applications that each have multiple tenants. This scenario isn't covered by this article but similar principles apply. + +An important factor is the way end-users access their tenant data. When end-users access Azure Data Explorer directly, access control must be configured in Azure Data Explorer to isolate the user's view to their own data. When a proxy application accesses their data in Azure Data Explorer, the application can do the isolation. + +This article describes some deployment architectures and provides characteristics for each. You can use the characteristics to help you decide which architecture works best for your solution. + +## Noisy neighbor + +In general, sharing a cluster among many tenants, regardless of the architecture used, means different tenants share the cluster's resources. This can lead to the [noisy neighbor](/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor) antipattern. + +For instance, if a tenant performs many compute-intensive queries or ingestions, other tenants are likely to be impacted by resource starvation. This can be mitigated by using [workload groups](/kusto/management/workload-groups?view=azure-data-explorer&preserve-view=true). You can also use policies to control caching and overall storage. + +## Architectures overview + +The next sections explore deployment architectures in detail. This section contrasts the architectures to facilitate decision making. + +|Architecture|Strengths| +|---|---| +|One tenant per database|- Tenants' isolation: no need for proxy
- Can have different policies, such as retention policies, per tenant
- Flexibility in schema evolution per tenant
- Easy and quick removal of tenant data| +|One table for many tenants|- Efficient data consolidation and extent management
- Simplified schema evolution
- Best suited for materialized views
- Ideal for partitioning| +|One tenant per table in a single database|Not recommended| + +## Architecture: One tenant per database + +:::image type="content" source="../media/multitenant/one-tenant-per-db.png" alt-text="Diagram showing the architecture for one tenant per database."::: + +This is a popular and straight forward architecture. Each tenant gets its own database. Each database has the same schema. + +The characteristics of this architecture are: + +* **Provisioning a new tenant**: Requires creating a new database and [deploying schema entities](automated-deploy-overview.md#deploy-schema-entities) on it. + +* **Removing a tenant**: Requires deleting the database. Deleting a database can be done in a few seconds. Consumes little and constant resources that aren't linear with tenant's data volume. + +* **Database schemas updates**: Each tenant can be independently updated at different times. Applications that access the databases must be aware of the version of each database they interact with. + +* **Retention and caching policies**: Each tenant can have its own unique policies, which enable you to provide custom retention and caching policies to your customers. + +* **Security boundary per tenant**: + * For multitenant application (proxy): Configure your application to target the relevant database. Use [access restriction](/kusto/query/cross-cluster-or-database-queries?view=azure-data-explorer&preserve-view=true#qualified-names-and-restrict-access-statements) on queries to prohibit [cross-database queries](/kusto/query/cross-cluster-or-database-queries?view=azure-data-explorer&preserve-view=true). + * For users with direct access: Users can be granted access at the [database level](/kusto/access-control/role-based-access-control?view=azure-data-explorer&preserve-view=true). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. + +* **Aggregating data from multiple tenants at scale**: Use the [union operator](/kusto/query/union-operator?view=azure-data-explorer&preserve-view=true) to aggregate data between databases. However, this method can become cumbersome as the number of tenants increases. Even though aggregating data from multiple tenants might be a design goal from the tenant's perspective, it might be of interest for solution owner to aggregate data from all tenants to gather statistics. + +* **Extents fragmentation**: Each tenant ingesting a few records per database table leads to the creation of small [extents](/kusto/management/extents-overview?view=azure-data-explorer&preserve-view=true) that later need to be merged. This results in higher cost for extent management. Therefore, we strongly recommend using [streaming ingestion](ingest-data-streaming.md), such as Event Hubs or Event Grid ingestion. To use streaming ingestion, you must make sure it's enabled on the cluster and table. + +* **Materialized views and partitioning policy**. As number of tenants increases, it's important to remember that there are limits to the number of [materialized views](/kusto/management/materialized-views/materialized-view-overview?view=azure-data-explorer&preserve-view=true#performance-considerations) and [partition policies](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true#supported-scenarios) a cluster can run efficiently. + +* **Event Grid and Event Hubs data connections**: These data connections are created per database. Therefore, this architecture requires a data connection and Event Grid or Event Hubs instance per tenant, which adds management complexity. Consider using event routing for [Event Hubs](ingest-data-event-hub-overview.md#events-routing) and [Event Grid](ingest-data-event-grid-overview.md#events-routing). + +## Architecture: One table for many tenants + +:::image type="content" source="../media/multitenant/one-db-for-many-tenants.png" alt-text="Diagram showing the architecture for one database for many tenants."::: + +This architecture is more aggressive in its consolidation, using a single database for all tenants. Each table in the database has a **Tenant ID** column, or equivalent, which allows for filtering for a single tenant's data. You can [partition](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true) tables by tenant to improve query performance, since most queries are likely to filter by tenant. Where possible, you should consider partition with another column using a *compound* partition key. For example, you can create a *compound* partition key concatenating the **tenant ID** and another columns' values. + +The characteristics of this architecture are: + +* **Provisioning a new tenant**: Provisioning a new tenant doesn't require any database creation or schema adjustment. The new **tenant ID** is used in new records. + +* **Removing a tenant**: Requires a [soft delete](/kusto/concepts/data-soft-delete?view=azure-data-explorer&preserve-view=true) or [purge](/kusto/concepts/data-purge?view=azure-data-explorer&preserve-view=true) of the tenant's data. You can batch multiple purges together, for example, at the end of week to limit the impact on resource consumption. + +* **Database schemas updates**: All tenants' schema are upgraded at the same time. Since all tenants share table, changing table schemas changes all tenants at once. + +* **Retention and caching policies**: The policies are the same for all tenants since they all share the same table. + +* **Security boundary per tenant**: + * For multitenant application (proxy): Use the [Restrict statement](/kusto/query/restrict-statement?view=azure-data-explorer&preserve-view=true) + * For users with direct access: Use the [Row Level Security Policy](/kusto/management/row-level-security-policy) and familiarize yourself with its [limitations](/kusto/management/row-level-security-policy?view=azure-data-explorer&preserve-view=true#limitations). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. + +* **Aggregating data from multiple tenants at scale**: Users with the sufficient access permissions can run a standard aggregation query on multiple tenants' data. + +* **Extents fragmentation**: Since all tenants ingest data into the same table, data can usually be consolidated and efficiently ingested in one, or a few, extents. + +* **Materialized views and partitioning policy**: These can be used on multitenant table. You can improve performance by partitioning on the **Tenant ID**, or equivalent, column. For more information, see [Scenarios for partition policies](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true#supported-scenarios). + +* **Event Grid and Event Hubs data connections**: You consolidated data connections since data for all tenants ends up in one table. + +## Architecture: One tenant per table in a single database + +:::image type="content" source="../media/multitenant/one-tenant-per-table.png" alt-text="Diagram showing the architecture for one tenant per table."::: + +This architecture is a combination of the previous architectures where the data of all tenants ends up in a single database but separate tables. This architecture fails to capture all the advantages of the other architectures. + +Although each tenant's data is segregated, they all reside in the same security context of the same database. Like the multi-database architecture, this architecture can lead to extent fragmentation. The table name is different for each tenant and therefore the queries must be customized for each tenant. diff --git a/data-explorer/includes/media/multitenant/one-db-for-many-tenants.png b/data-explorer/includes/media/multitenant/one-db-for-many-tenants.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4439d8e7ce3620b8573eaa3834fb3e7eac1cab GIT binary patch literal 33460 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 AApigX literal 0 HcmV?d00001 diff --git a/data-explorer/includes/media/multitenant/one-tenant-per-table.png b/data-explorer/includes/media/multitenant/one-tenant-per-table.png new file mode 100644 index 0000000000000000000000000000000000000000..9c850da5e111206e7aa1717d09d8e52d7646cbb2 GIT binary patch literal 22009 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 O!g{1?DmXG{Eb`2Ws-$wsX}I_ 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 byM$sLCX@s`y%1iF~ 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 KT-G@yGywotpy2!f diff --git a/data-explorer/media/multitenant/one-tenant-per-db.png b/data-explorer/media/multitenant/one-tenant-per-db.png deleted file mode 100644 index 0de166cdf20f4b9b2768622016b62e27598596b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26444 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 Ix?msqUrE*0YXATM diff --git a/data-explorer/media/multitenant/one-tenant-per-table.png b/data-explorer/media/multitenant/one-tenant-per-table.png deleted file mode 100644 index 8430dce563b2e6d566d96c8f735ecbe1eb026d03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17058 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 diff --git a/data-explorer/multi-tenant.md b/data-explorer/multi-tenant.md index d4e599480b..330f74e599 100644 --- a/data-explorer/multi-tenant.md +++ b/data-explorer/multi-tenant.md @@ -7,97 +7,7 @@ ms.date: 05/11/2026 --- # How to architect a multitenant solution with Azure Data Explorer -The concept of multi-tenancy in Azure Data Explorer refers to serving different tenants and storing their data in a single cluster. - -> [!IMPORTANT] -> -> A multitenant solution can also be architected in Microsoft Fabric's [Real-Time Intelligence](/fabric/real-time-intelligence/overview) workload, using KQL databases inside an [Eventhouse](/fabric/real-time-intelligence/eventhouse). - -A *tenant* can represent a customer, a group of users, or any classifications of users where data needs to be segregated along the tenants' boundaries. You can also have multi-level multi-tenancy scenario, such as multiple applications that each have multiple tenants. This scenario isn't covered by this article but similar principles apply. - -An important factor is the way end-users access their tenant data. When end-users access Azure Data Explorer directly, access control must be configured in Azure Data Explorer to isolate the user's view to their own data. When a proxy application accesses their data in Azure Data Explorer, the application can do the isolation. - -This article describes some deployment architectures and provides characteristics for each. You can use the characteristics to help you decide which architecture works best for your solution. - -## Noisy neighbor - -In general, sharing a cluster among many tenants, regardless of the architecture used, means different tenants share the cluster's resources. This can lead to the [noisy neighbor](/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor) antipattern. - -For instance, if a tenant performs many compute-intensive queries or ingestions, other tenants are likely to be impacted by resource starvation. This can be mitigated by using [workload groups](/kusto/management/workload-groups?view=azure-data-explorer&preserve-view=true). You can also use policies to control caching and overall storage. - -## Architectures overview - -The next sections explore deployment architectures in detail. This section contrasts the architectures to facilitate decision making. - -|Architecture|Strengths| -|---|---| -|One tenant per database|- Tenants' isolation: no need for proxy
- Can have different policies, such as retention policies, per tenant
- Flexibility in schema evolution per tenant
- Easy and quick removal of tenant data| -|One table for many tenants|- Efficient data consolidation and extent management
- Simplified schema evolution
- Best suited for materialized views
- Ideal for partitioning| -|One tenant per table in a single database|Not recommended| - -## Architecture: One tenant per database - -:::image type="content" source="media/multitenant/one-tenant-per-db.png" alt-text="Diagram showing the architecture for one tenant per database."::: - -This is a popular and straight forward architecture. Each tenant gets its own database. Each database has the same schema. - -The characteristics of this architecture are: - -* **Provisioning a new tenant**: Requires creating a new database and [deploying schema entities](automated-deploy-overview.md#deploy-schema-entities) on it. - -* **Removing a tenant**: Requires deleting the database. Deleting a database can be done in a few seconds. Consumes little and constant resources that aren't linear with tenant's data volume. - -* **Database schemas updates**: Each tenant can be independently updated at different times. Applications that access the databases must be aware of the version of each database they interact with. - -* **Retention and caching policies**: Each tenant can have its own unique policies, which enable you to provide custom retention and caching policies to your customers. - -* **Security boundary per tenant**: - * For multitenant application (proxy): Configure your application to target the relevant database. Use [access restriction](/kusto/query/cross-cluster-or-database-queries?view=azure-data-explorer&preserve-view=true#qualified-names-and-restrict-access-statements) on queries to prohibit [cross-database queries](/kusto/query/cross-cluster-or-database-queries?view=azure-data-explorer&preserve-view=true). - * For users with direct access: Users can be granted access at the [database level](/kusto/access-control/role-based-access-control?view=azure-data-explorer&preserve-view=true). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. - -* **Aggregating data from multiple tenants at scale**: Use the [union operator](/kusto/query/union-operator?view=azure-data-explorer&preserve-view=true) to aggregate data between databases. However, this method can become cumbersome as the number of tenants increases. Even though aggregating data from multiple tenants might be a design goal from the tenant's perspective, it might be of interest for solution owner to aggregate data from all tenants to gather statistics. - -* **Extents fragmentation**: Each tenant ingesting a few records per database table leads to the creation of small [extents](/kusto/management/extents-overview?view=azure-data-explorer&preserve-view=true) that later need to be merged. This results in higher cost for extent management. Therefore, we strongly recommend using [streaming ingestion](ingest-data-streaming.md), such as Event Hubs or Event Grid ingestion. To use streaming ingestion, you must make sure it's enabled on the cluster and table. - -* **Materialized views and partitioning policy**. As number of tenants increases, it's important to remember that there are limits to the number of [materialized views](/kusto/management/materialized-views/materialized-view-overview?view=azure-data-explorer&preserve-view=true#performance-considerations) and [partition policies](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true#supported-scenarios) a cluster can run efficiently. - -* **Event Grid and Event Hubs data connections**: These data connections are created per database. Therefore, this architecture requires a data connection and Event Grid or Event Hubs instance per tenant, which adds management complexity. Consider using event routing for [Event Hubs](ingest-data-event-hub-overview.md#events-routing) and [Event Grid](ingest-data-event-grid-overview.md#events-routing). - -## Architecture: One table for many tenants - -:::image type="content" source="media/multitenant/one-db-for-many-tenants.png" alt-text="Diagram showing the architecture for one database for many tenants."::: - -This architecture is more aggressive in its consolidation, using a single database for all tenants. Each table in the database has a **Tenant ID** column, or equivalent, which allows for filtering for a single tenant's data. You can [partition](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true) tables by tenant to improve query performance, since most queries are likely to filter by tenant. Where possible, you should consider partition with another column using a *compound* partition key. For example, you can create a *compound* partition key concatenating the **tenant ID** and another columns' values. - -The characteristics of this architecture are: - -* **Provisioning a new tenant**: Provisioning a new tenant doesn't require any database creation or schema adjustment. The new **tenant ID** is used in new records. - -* **Removing a tenant**: Requires a [soft delete](/kusto/concepts/data-soft-delete?view=azure-data-explorer&preserve-view=true) or [purge](/kusto/concepts/data-purge?view=azure-data-explorer&preserve-view=true) of the tenant's data. You can batch multiple purges together, for example, at the end of week to limit the impact on resource consumption. - -* **Database schemas updates**: All tenants' schema are upgraded at the same time. Since all tenants share table, changing table schemas changes all tenants at once. - -* **Retention and caching policies**: The policies are the same for all tenants since they all share the same table. - -* **Security boundary per tenant**: - * For multitenant application (proxy): Use the [Restrict statement](/kusto/query/restrict-statement?view=azure-data-explorer&preserve-view=true) - * For users with direct access: Use the [Row Level Security Policy](/kusto/management/row-level-security-policy) and familiarize yourself with its [limitations](/kusto/management/row-level-security-policy?view=azure-data-explorer&preserve-view=true#limitations). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. - -* **Aggregating data from multiple tenants at scale**: Users with the sufficient access permissions can run a standard aggregation query on multiple tenants' data. - -* **Extents fragmentation**: Since all tenants ingest data into the same table, data can usually be consolidated and efficiently ingested in one, or a few, extents. - -* **Materialized views and partitioning policy**: These can be used on multitenant table. You can improve performance by partitioning on the **Tenant ID**, or equivalent, column. For more information, see [Scenarios for partition policies](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true#supported-scenarios). - -* **Event Grid and Event Hubs data connections**: You consolidated data connections since data for all tenants ends up in one table. - -## Architecture: One tenant per table in a single database - -:::image type="content" source="media/multitenant/one-tenant-per-table.png" alt-text="Diagram showing the architecture for one tenant per table."::: - -This architecture is a combination of the previous architectures where the data of all tenants ends up in a single database but separate tables. This architecture fails to capture all the advantages of the other architectures. - -Although each tenant's data is segregated, they all reside in the same security context of the same database. Like the multi-database architecture, this architecture can lead to extent fragmentation. The table name is different for each tenant and therefore the queries must be customized for each tenant. +[!INCLUDE [multitenancy](includes/cross-repo/multitenancy.md)] ## Related content From b3cdc5278ac4fd79c989e068f971bc8ce2b6884f Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 14:40:33 +0300 Subject: [PATCH 3/8] wip --- .../includes/cross-repo/multitenancy.md | 40 ++++++++----------- data-explorer/multi-tenant.md | 6 +++ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/data-explorer/includes/cross-repo/multitenancy.md b/data-explorer/includes/cross-repo/multitenancy.md index 40dba4162e..ed820a4767 100644 --- a/data-explorer/includes/cross-repo/multitenancy.md +++ b/data-explorer/includes/cross-repo/multitenancy.md @@ -3,13 +3,7 @@ ms.topic: include ms.date: 05/12/2026 --- -The concept of multi-tenancy in Azure Data Explorer refers to serving different tenants and storing their data in a single cluster. - -> [!IMPORTANT] -> -> A multitenant solution can also be architected in Microsoft Fabric's [Real-Time Intelligence](/fabric/real-time-intelligence/overview) workload, using KQL databases inside an [Eventhouse](/fabric/real-time-intelligence/eventhouse). - -A *tenant* can represent a customer, a group of users, or any classifications of users where data needs to be segregated along the tenants' boundaries. You can also have multi-level multi-tenancy scenario, such as multiple applications that each have multiple tenants. This scenario isn't covered by this article but similar principles apply. +A *tenant* can represent a customer, a group of users, or any classifications of users where data needs to be segregated along the tenants boundaries. You can also have multilevel multitenancy scenario, such as multiple applications that each have multiple tenants. This article doesn't cover this scenario, but similar principles apply. An important factor is the way end-users access their tenant data. When end-users access Azure Data Explorer directly, access control must be configured in Azure Data Explorer to isolate the user's view to their own data. When a proxy application accesses their data in Azure Data Explorer, the application can do the isolation. @@ -19,16 +13,16 @@ This article describes some deployment architectures and provides characteristic In general, sharing a cluster among many tenants, regardless of the architecture used, means different tenants share the cluster's resources. This can lead to the [noisy neighbor](/azure/architecture/antipatterns/noisy-neighbor/noisy-neighbor) antipattern. -For instance, if a tenant performs many compute-intensive queries or ingestions, other tenants are likely to be impacted by resource starvation. This can be mitigated by using [workload groups](/kusto/management/workload-groups?view=azure-data-explorer&preserve-view=true). You can also use policies to control caching and overall storage. +For instance, if a tenant performs many compute-intensive queries or ingestions, other tenants are likely to be impacted by resource starvation. This can be mitigated by using [workload groups](/kusto/management/workload-groups?preserve-view=true). You can also use policies to control caching and overall storage. ## Architectures overview -The next sections explore deployment architectures in detail. This section contrasts the architectures to facilitate decision making. +The next sections explore deployment architectures in detail. This section contrasts the architectures to facilitate decision making. |Architecture|Strengths| |---|---| -|One tenant per database|- Tenants' isolation: no need for proxy
- Can have different policies, such as retention policies, per tenant
- Flexibility in schema evolution per tenant
- Easy and quick removal of tenant data| -|One table for many tenants|- Efficient data consolidation and extent management
- Simplified schema evolution
- Best suited for materialized views
- Ideal for partitioning| +|One tenant per database|- Tenants' isolation: no need for proxy
- Can have different policies, such as retention policies, per tenant
- Flexibility in schema evolution per tenant
- Easy and quick removal of tenant data| +|One table for many tenants|- Efficient data consolidation and extent management
- Simplified schema evolution
- Best suited for materialized views
- Ideal for partitioning| |One tenant per table in a single database|Not recommended| ## Architecture: One tenant per database @@ -39,7 +33,7 @@ This is a popular and straight forward architecture. Each tenant gets its own da The characteristics of this architecture are: -* **Provisioning a new tenant**: Requires creating a new database and [deploying schema entities](automated-deploy-overview.md#deploy-schema-entities) on it. +* **Provisioning a new tenant**: Requires creating a new database and [deploying schema entities](../..automated-deploy-overview.md#deploy-schema-entities) on it. * **Removing a tenant**: Requires deleting the database. Deleting a database can be done in a few seconds. Consumes little and constant resources that aren't linear with tenant's data volume. @@ -48,42 +42,42 @@ The characteristics of this architecture are: * **Retention and caching policies**: Each tenant can have its own unique policies, which enable you to provide custom retention and caching policies to your customers. * **Security boundary per tenant**: - * For multitenant application (proxy): Configure your application to target the relevant database. Use [access restriction](/kusto/query/cross-cluster-or-database-queries?view=azure-data-explorer&preserve-view=true#qualified-names-and-restrict-access-statements) on queries to prohibit [cross-database queries](/kusto/query/cross-cluster-or-database-queries?view=azure-data-explorer&preserve-view=true). - * For users with direct access: Users can be granted access at the [database level](/kusto/access-control/role-based-access-control?view=azure-data-explorer&preserve-view=true). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. + * For multitenant application (proxy): Configure your application to target the relevant database. Use [access restriction](/kusto/query/cross-cluster-or-database-queries?preserve-view=true#qualified-names-and-restrict-access-statements) on queries to prohibit [cross-database queries](/kusto/query/cross-cluster-or-database-queries?preserve-view=true). + * For users with direct access: Users can be granted access at the [database level](/kusto/access-control/role-based-access-control?preserve-view=true). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. -* **Aggregating data from multiple tenants at scale**: Use the [union operator](/kusto/query/union-operator?view=azure-data-explorer&preserve-view=true) to aggregate data between databases. However, this method can become cumbersome as the number of tenants increases. Even though aggregating data from multiple tenants might be a design goal from the tenant's perspective, it might be of interest for solution owner to aggregate data from all tenants to gather statistics. +* **Aggregating data from multiple tenants at scale**: Use the [union operator](/kusto/query/union-operator?preserve-view=true) to aggregate data between databases. However, this method can become cumbersome as the number of tenants increases. Even though aggregating data from multiple tenants might be a design goal from the tenant's perspective, it might be of interest for solution owner to aggregate data from all tenants to gather statistics. -* **Extents fragmentation**: Each tenant ingesting a few records per database table leads to the creation of small [extents](/kusto/management/extents-overview?view=azure-data-explorer&preserve-view=true) that later need to be merged. This results in higher cost for extent management. Therefore, we strongly recommend using [streaming ingestion](ingest-data-streaming.md), such as Event Hubs or Event Grid ingestion. To use streaming ingestion, you must make sure it's enabled on the cluster and table. +* **Extents fragmentation**: Each tenant ingesting a few records per database table leads to the creation of small [extents](/kusto/management/extents-overview?preserve-view=true) that later need to be merged. This results in higher cost for extent management. Therefore, we strongly recommend using [streaming ingestion](ingest-data-streaming.md), such as Event Hubs or Event Grid ingestion. To use streaming ingestion, you must make sure it's enabled on the cluster and table. -* **Materialized views and partitioning policy**. As number of tenants increases, it's important to remember that there are limits to the number of [materialized views](/kusto/management/materialized-views/materialized-view-overview?view=azure-data-explorer&preserve-view=true#performance-considerations) and [partition policies](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true#supported-scenarios) a cluster can run efficiently. +* **Materialized views and partitioning policy**. As number of tenants increases, it's important to remember that there are limits to the number of [materialized views](/kusto/management/materialized-views/materialized-view-overview?preserve-view=true#performance-considerations) and [partition policies](/kusto/management/partitioning-policy?preserve-view=true#supported-scenarios) a cluster can run efficiently. -* **Event Grid and Event Hubs data connections**: These data connections are created per database. Therefore, this architecture requires a data connection and Event Grid or Event Hubs instance per tenant, which adds management complexity. Consider using event routing for [Event Hubs](ingest-data-event-hub-overview.md#events-routing) and [Event Grid](ingest-data-event-grid-overview.md#events-routing). +* **Event Grid and Event Hubs data connections**: These data connections are created per database. Therefore, this architecture requires a data connection and Event Grid or Event Hubs instance per tenant, which adds management complexity. Consider using event routing for [Event Hubs](../..ingest-data-event-hub-overview.md#events-routing) and [Event Grid](../..ingest-data-event-grid-overview.md#events-routing). ## Architecture: One table for many tenants :::image type="content" source="../media/multitenant/one-db-for-many-tenants.png" alt-text="Diagram showing the architecture for one database for many tenants."::: -This architecture is more aggressive in its consolidation, using a single database for all tenants. Each table in the database has a **Tenant ID** column, or equivalent, which allows for filtering for a single tenant's data. You can [partition](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true) tables by tenant to improve query performance, since most queries are likely to filter by tenant. Where possible, you should consider partition with another column using a *compound* partition key. For example, you can create a *compound* partition key concatenating the **tenant ID** and another columns' values. +This architecture is more aggressive in its consolidation, using a single database for all tenants. Each table in the database has a **Tenant ID** column, or equivalent, which allows for filtering for a single tenant's data. You can [partition](/kusto/management/partitioning-policy?preserve-view=true) tables by tenant to improve query performance, since most queries are likely to filter by tenant. Where possible, you should consider partition with another column using a *compound* partition key. For example, you can create a *compound* partition key concatenating the **tenant ID** and another columns' values. The characteristics of this architecture are: * **Provisioning a new tenant**: Provisioning a new tenant doesn't require any database creation or schema adjustment. The new **tenant ID** is used in new records. -* **Removing a tenant**: Requires a [soft delete](/kusto/concepts/data-soft-delete?view=azure-data-explorer&preserve-view=true) or [purge](/kusto/concepts/data-purge?view=azure-data-explorer&preserve-view=true) of the tenant's data. You can batch multiple purges together, for example, at the end of week to limit the impact on resource consumption. +* **Removing a tenant**: Requires a [soft delete](/kusto/concepts/data-soft-delete?preserve-view=true) or [purge](/kusto/concepts/data-purge?preserve-view=true) of the tenant's data. You can batch multiple purges together, for example, at the end of week to limit the impact on resource consumption. * **Database schemas updates**: All tenants' schema are upgraded at the same time. Since all tenants share table, changing table schemas changes all tenants at once. * **Retention and caching policies**: The policies are the same for all tenants since they all share the same table. * **Security boundary per tenant**: - * For multitenant application (proxy): Use the [Restrict statement](/kusto/query/restrict-statement?view=azure-data-explorer&preserve-view=true) - * For users with direct access: Use the [Row Level Security Policy](/kusto/management/row-level-security-policy) and familiarize yourself with its [limitations](/kusto/management/row-level-security-policy?view=azure-data-explorer&preserve-view=true#limitations). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. + * For multitenant application (proxy): Use the [Restrict statement](/kusto/query/restrict-statement?preserve-view=true) + * For users with direct access: Use the [Row Level Security Policy](/kusto/management/row-level-security-policy) and familiarize yourself with its [limitations](/kusto/management/row-level-security-policy?preserve-view=true#limitations). Giving users direct access to their database creates a dependency for the implementation details, making it difficult to change the implementation. Therefore, we strongly recommend using the proxy approach for accessing the database. * **Aggregating data from multiple tenants at scale**: Users with the sufficient access permissions can run a standard aggregation query on multiple tenants' data. * **Extents fragmentation**: Since all tenants ingest data into the same table, data can usually be consolidated and efficiently ingested in one, or a few, extents. -* **Materialized views and partitioning policy**: These can be used on multitenant table. You can improve performance by partitioning on the **Tenant ID**, or equivalent, column. For more information, see [Scenarios for partition policies](/kusto/management/partitioning-policy?view=azure-data-explorer&preserve-view=true#supported-scenarios). +* **Materialized views and partitioning policy**: These can be used on multitenant table. You can improve performance by partitioning on the **Tenant ID**, or equivalent, column. For more information, see [Scenarios for partition policies](/kusto/management/partitioning-policy?preserve-view=true#supported-scenarios). * **Event Grid and Event Hubs data connections**: You consolidated data connections since data for all tenants ends up in one table. diff --git a/data-explorer/multi-tenant.md b/data-explorer/multi-tenant.md index 330f74e599..6f3de94dc6 100644 --- a/data-explorer/multi-tenant.md +++ b/data-explorer/multi-tenant.md @@ -7,6 +7,12 @@ ms.date: 05/11/2026 --- # How to architect a multitenant solution with Azure Data Explorer +The concept of multi-tenancy in Azure Data Explorer refers to serving different tenants and storing their data in a single cluster. + +> [!IMPORTANT] +> +> A multitenant solution can also be architected in Microsoft Fabric's [Real-Time Intelligence](/fabric/real-time-intelligence/overview) workload, using KQL databases inside an [Eventhouse](/fabric/real-time-intelligence/eventhouse). + [!INCLUDE [multitenancy](includes/cross-repo/multitenancy.md)] ## Related content From e1a6421e5774d9a249225694bc470c8a38ef3f91 Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 14:43:44 +0300 Subject: [PATCH 4/8] multi-tenant > multitenant in toc --- data-explorer/toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-explorer/toc.yml b/data-explorer/toc.yml index f8bfcbd9f0..a998601019 100644 --- a/data-explorer/toc.yml +++ b/data-explorer/toc.yml @@ -18,7 +18,7 @@ items: items: - name: Solution architectures href: solution-architectures.md - - name: Multi-tenant solutions + - name: Multitenant solutions href: multi-tenant.md - name: "POC playbook: Big data analytics with Azure Data Explorer" href: proof-of-concept-playbook.md From 6755b88c17119249d6ac1f3cf8e123d52e5b036e Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 14:49:11 +0300 Subject: [PATCH 5/8] ms.date --- data-explorer/multi-tenant.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data-explorer/multi-tenant.md b/data-explorer/multi-tenant.md index 6f3de94dc6..1c6b28a5d3 100644 --- a/data-explorer/multi-tenant.md +++ b/data-explorer/multi-tenant.md @@ -1,9 +1,9 @@ --- -title: Comparing different multitenant solutions with Azure Data Explorer +title: Comparing Different Multitenant Solutions with Azure Data Explorer description: Learn about the different ways to architect a multitenant solution in Azure Data Explorer. ms.reviewer: vplauzon ms.topic: how-to -ms.date: 05/11/2026 +ms.date: 05/12/2026 --- # How to architect a multitenant solution with Azure Data Explorer From f5e7dabeabbf9824513b3cb4c26cc1988b510b3f Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 15:13:04 +0300 Subject: [PATCH 6/8] links fixed for cross repo --- data-explorer/includes/cross-repo/multitenancy.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data-explorer/includes/cross-repo/multitenancy.md b/data-explorer/includes/cross-repo/multitenancy.md index ed820a4767..782b795bf5 100644 --- a/data-explorer/includes/cross-repo/multitenancy.md +++ b/data-explorer/includes/cross-repo/multitenancy.md @@ -33,7 +33,7 @@ This is a popular and straight forward architecture. Each tenant gets its own da The characteristics of this architecture are: -* **Provisioning a new tenant**: Requires creating a new database and [deploying schema entities](../..automated-deploy-overview.md#deploy-schema-entities) on it. +* **Provisioning a new tenant**: Requires creating a new database and [deploying schema entities](/azure/data-explorer/automated-deploy-overview#deploy-schema-entities) on it. * **Removing a tenant**: Requires deleting the database. Deleting a database can be done in a few seconds. Consumes little and constant resources that aren't linear with tenant's data volume. @@ -47,11 +47,11 @@ The characteristics of this architecture are: * **Aggregating data from multiple tenants at scale**: Use the [union operator](/kusto/query/union-operator?preserve-view=true) to aggregate data between databases. However, this method can become cumbersome as the number of tenants increases. Even though aggregating data from multiple tenants might be a design goal from the tenant's perspective, it might be of interest for solution owner to aggregate data from all tenants to gather statistics. -* **Extents fragmentation**: Each tenant ingesting a few records per database table leads to the creation of small [extents](/kusto/management/extents-overview?preserve-view=true) that later need to be merged. This results in higher cost for extent management. Therefore, we strongly recommend using [streaming ingestion](ingest-data-streaming.md), such as Event Hubs or Event Grid ingestion. To use streaming ingestion, you must make sure it's enabled on the cluster and table. +* **Extents fragmentation**: Each tenant ingesting a few records per database table leads to the creation of small [extents](/kusto/management/extents-overview?preserve-view=true) that later need to be merged. This results in higher cost for extent management. Therefore, we strongly recommend using [streaming ingestion](/azure/data-explorer/ingest-data-streaming), such as Event Hubs or Event Grid ingestion. To use streaming ingestion, you must make sure it's enabled on the cluster and table. * **Materialized views and partitioning policy**. As number of tenants increases, it's important to remember that there are limits to the number of [materialized views](/kusto/management/materialized-views/materialized-view-overview?preserve-view=true#performance-considerations) and [partition policies](/kusto/management/partitioning-policy?preserve-view=true#supported-scenarios) a cluster can run efficiently. -* **Event Grid and Event Hubs data connections**: These data connections are created per database. Therefore, this architecture requires a data connection and Event Grid or Event Hubs instance per tenant, which adds management complexity. Consider using event routing for [Event Hubs](../..ingest-data-event-hub-overview.md#events-routing) and [Event Grid](../..ingest-data-event-grid-overview.md#events-routing). +* **Event Grid and Event Hubs data connections**: These data connections are created per database. Therefore, this architecture requires a data connection and Event Grid or Event Hubs instance per tenant, which adds management complexity. Consider using event routing for [Event Hubs](/azure/data-explorer/ingest-data-event-hub-overview#events-routing) and [Event Grid](/azure/data-explorer/ingest-data-event-grid-overview#events-routing). ## Architecture: One table for many tenants From f8369338d965d7cf6c705383b63a1bd0ba123682 Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 16:06:15 +0300 Subject: [PATCH 7/8] re-build --- data-explorer/includes/cross-repo/multitenancy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/data-explorer/includes/cross-repo/multitenancy.md b/data-explorer/includes/cross-repo/multitenancy.md index 782b795bf5..7cd7b550ec 100644 --- a/data-explorer/includes/cross-repo/multitenancy.md +++ b/data-explorer/includes/cross-repo/multitenancy.md @@ -3,6 +3,7 @@ ms.topic: include ms.date: 05/12/2026 --- + A *tenant* can represent a customer, a group of users, or any classifications of users where data needs to be segregated along the tenants boundaries. You can also have multilevel multitenancy scenario, such as multiple applications that each have multiple tenants. This article doesn't cover this scenario, but similar principles apply. An important factor is the way end-users access their tenant data. When end-users access Azure Data Explorer directly, access control must be configured in Azure Data Explorer to isolate the user's view to their own data. When a proxy application accesses their data in Azure Data Explorer, the application can do the isolation. From 2f6f79b41352b3ecfbc4c4dd2d7dfcabc607c8c8 Mon Sep 17 00:00:00 2001 From: ktalmor <193799742+ktalmor@users.noreply.github.com> Date: Tue, 12 May 2026 16:10:50 +0300 Subject: [PATCH 8/8] re-build --- data-explorer/includes/cross-repo/multitenancy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/data-explorer/includes/cross-repo/multitenancy.md b/data-explorer/includes/cross-repo/multitenancy.md index ed820a4767..609cb725bf 100644 --- a/data-explorer/includes/cross-repo/multitenancy.md +++ b/data-explorer/includes/cross-repo/multitenancy.md @@ -3,6 +3,7 @@ ms.topic: include ms.date: 05/12/2026 --- + A *tenant* can represent a customer, a group of users, or any classifications of users where data needs to be segregated along the tenants boundaries. You can also have multilevel multitenancy scenario, such as multiple applications that each have multiple tenants. This article doesn't cover this scenario, but similar principles apply. An important factor is the way end-users access their tenant data. When end-users access Azure Data Explorer directly, access control must be configured in Azure Data Explorer to isolate the user's view to their own data. When a proxy application accesses their data in Azure Data Explorer, the application can do the isolation.