问题标签 [azure-elastic-sharding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Azure Elastic DB - 修改每个分片中的架构
我是 Azure 弹性数据库功能的新手,它看起来非常棒。但我找不到的是如何更新所有分片的架构。因此,如果我有多个分片并且我想添加/删除一个列、表或只是添加/删除一个存储过程。
好吧,所有分片都是数据库,我可以一一访问和修改,但是有没有办法一次将架构更改发布到多个分片?
azure - 'New-ShardMapManager' 未被识别为尝试通过 powershell 访问的 cmdlet 的名称
我使用的步骤:Login-AzureRmAccount——登录后我在 Powershell 中以管理员模式运行了这个 cmdlet 我在下面的查询中运行了这个
我收到以下错误:
我正在使用 Powershell 4 版本
sql - 在 Azure 数据库中实现多租户的最佳方法是什么
我们计划在 Azure 云中实现多租户应用程序。我正在寻找一种在数据库级别实现此功能的最佳方法。DB 模式非常庞大,我们有 100 多个表分布在多个模块中。并且每个客户端的数据大小都不同。对于某些人来说,表中可能有 100 行。但对于某些人来说,它可能是数百万行。在这种情况下实施 Elastic DB 的最佳方法是什么?
在这种情况下我如何设计分片?每个分片或租户列表的单个租户?如果我为每个分片创建一个租户列表,并且相邻的租户有很多数据,那么它就会人满为患。我们如何有效地找到分区的分片键?
如果我每个分片单租户,我可以根据数据大小扩展单个分片吗?
有没有人遇到过这样的场景?请帮我提供一些示例链接?
谢谢您的帮助!
c# - 无法使用 Azure SQL Elastic Scale 删除分片映射
我们的系统中有一个实体,称为“身份程序”。这也是我们的分片边界,每个身份程序都存储在自己的分片中,所以分片的标识符就是身份程序的标识符。
我们正在实施物理删除身份程序的能力。作为该过程的一部分,我们要清理分片映射。为此,我编写了以下内容:
问题是当它DeleteMapping
调用它时会出现异常:
ShardManagementException:在分片映射“IdentityProgramIdListShardMap”中引用分片“[shard-connection-string]”的映射不存在。为操作“RemovePointMapping”执行存储过程“__ShardManagement.spBulkOperationShardMappingsGlobalBegin”时出错。如果另一个并发用户已经删除了映射,则可能会发生这种情况。
但是映射并没有被删除,因为在那之后我执行:
而且我可以看到 shardmap 条目仍然存在,并且标记为 Offline。
如果我删除对我的调用,MarkMappingOffline
我会收到一个异常,指出无法删除分片映射,因为它是在线的。
所以我似乎有一个catch-22。如果我将其标记为离线,它会认为分片映射已经消失并且不会让我删除它。如果我没有将其标记为离线,它会告诉我它必须离线。
azure-sql-database - 将 Azure SQL AccessToken 身份验证与 Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement 一起使用
在执行 OpenConnectionForKey() 时,我看不到在哪里可以更改登录方法以使用 AccessToken。此外,在指定凭据以在 SqlConnection 中使用令牌后,我无法更改登录方法。
c# - 无法从 Azure 弹性池中删除分片
从天蓝色弹性池中的分片映射中删除分片时遇到问题
所以首先我只是从 shardMap 中删除了映射,但是一旦我从 shardMap 中删除了 deleteShard,我就会得到以下信息:
属于分片映射“UserIdShardMap”的分片“[DataSource=*** Database=Test21]”已在存储中更新。为操作“DeleteShard”执行存储过程“__ShardManagement.spBulkOperationShardsGlobalBegin”时出错。如果另一个并发用户更新分片,则可能会发生这种情况。对分片位置执行 GetShard 操作以获取更新的实例。有人可以帮我吗?
c# - 弹性工具 - 如何为不同的服务器创建分片
我在本地 sql 服务器上的名为“ShardTesting”的数据库中创建了一个分片映射。我还在同一台服务器上创建了另外两个数据库:shard1 和 shard2。
现在我可以在主 ShardTesting 数据库中为这两个(shard1 和 shard2)数据库创建分片和映射,但我无法为 Azure 上另一台服务器上的任何数据库创建分片。我收到代码无法登录到这个新数据库的登录错误。
这就是我创建分片的方式。
发生的事情是它试图使用 ShardTesting 数据库凭据登录到这个新的服务器数据库,这显然是错误的,因为 ShardTesting 是我本地计算机上存储所有分片和映射的主数据库。
我看不到任何方法可以提供 userId 和 Password 以及这个新的服务器和数据库,以便库使用它们连接到这个新的数据库并创建它的分片。
azure - Azure Elastic Scale/Database-per-tenant:如何实现数据相关路由
基于在线 Microsoft Azure Elastic Scale 示例应用程序,我已经能够在 Azure 中创建我的 Shard Map Manager (SMM) 和弹性池数据库。我的架构是每个租户单独的数据库。我在我的 Web 应用程序中使用实体框架。我使用 byte[] 哈希作为基于字母数字客户名称的 Shard Key。客户名称是作为客户登录的一部分输入的,因此我可以在登录时确定要传递给 SMM 的唯一分片键。
我的问题是:
1.) 由于每个租户都有自己的数据库,我还需要在客户表的每一行中包含散列的客户名称/分片键吗?
2.) 我不明白在调用服务器期间分片密钥信息在何处传递给 SMM。它是在实体的上下文中还是需要成为查询本身的一部分?任何样品都将不胜感激!
azure - 为 Azure SQL 弹性(分片)数据库部署拆分合并服务
我正在尝试按照教程部署拆分合并服务(Azure 弹性数据库...工具)。
第一个复杂之处是文档指示我创建“Azure 云服务”。最接近的似乎是“云服务(经典)”,所以这就是我创建的。
在创建自签名证书时,我必须将 makecert 的参数(已弃用且似乎不再存在于任何 SDK 中)转换为 powershell New-SelfSignedCertificate
cmdlet。我传递给 cmdlet 的相关参数是:
- 主题:CN=*.cloudapp.net
- 密钥规范:密钥交换
- 文本扩展:2.5.29.37={文本}1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2
我终于创建/导出/上传了证书,完成了服务配置文件并创建了服务。Azure 门户报告 Web 和工作人员正在运行,但我无法点击服务 URL(即使在提示我选择我的证书后也拒绝 403 访问)。我确认我的证书指纹正确显示在服务配置的各个位置(DataEncryptionPrimaryCertificateThumbprint、DataEncryptionPrimary、AdditionalTrustedRootCertificationAuthorities、AllowedClientCertificateThumbprints、DataEncryptionPrimaryCertificateThumbprint)。我的证书指纹也显示为“证书”部分下配置中的指纹,如 SSL、CA 和 DataEncryptionPrimary。
我能想到的唯一导致访问被拒绝的是本文档中提到的内容,“如果您使用的是自签名证书,则需要禁用证书链验证。 ”它显示用于禁用的 PowerShell cmdlet在这种情况下,链验证(对于 API 服务;不知道这与我的服务有何不同)因InvalidOperation 而失败。
我有什么方法可以禁用我的“经典”云服务的证书链验证吗?其他要检查的事情的建议?
c# - ShardMapManager 和 ShardMap 对象是否应该作为单例全局缓存?
我有一个应用程序,其中包含多个按密钥分片的 Azure SQL 数据库。每次打开分片数据库连接时,我们都会检索 ShardMapManager 和 ListShardMap:
然后我们通过将分片键传递给来打开一个连接OpenConnectionForKey()
:
我们只对所有分片使用一个分片映射和一个列表映射,所以我的问题是——我们可以将这些对象缓存在一个全局变量中吗?它们是否设计为线程安全的,是否有助于提高性能?
更新
我在这里发现https://docs.microsoft.com/en-us/azure/sql-database/sql-database-elastic-scale-shard-map-management#constructing-a-shardmapmanager确实ShardMapManager
应该创建一次并且存储在全局变量中。
但是ListShardMap
呢?如果我们只有一个,我们也可以将它存储在一个全局变量中吗?