我不确定是否有一个命名模式,或者是否没有,因为这是一个糟糕的主意。但我需要我的服务在主动/主动负载平衡环境中运行。这只是应用程序服务器。数据库将位于单独的服务器上。我有一个服务,需要为表中的每条记录运行一个过程。此过程可能需要一两分钟,并且每 n 分钟重复一次(可配置,通常为 15 分钟)。
有一个需要此处理的 1000 条记录表,以及针对同一数据集运行的两个服务,我希望每个服务“签出”要处理的记录。我需要确保一次只有一个服务/线程在处理每条记录。
我有同事过去使用过“锁表”。将一条记录写入此表以在逻辑上锁定另一个表中的记录(顺便说一句,该其他表非常静态,并且添加了非常偶然的新记录),然后删除以释放锁定。
我想知道如果新表有一个列指示它何时被锁定,并且它当前被锁定,而不是不断插入删除,是否会更好。
有没有人有这种事情的提示?是否存在长期(ish)期限逻辑锁定的既定模式?关于如何确保一次只有一项服务获取锁的任何提示?(我的同事使用 TABLOCKX 锁定整个表。)
我有一个美元金额值,由于历史原因,它总是存储在 nvarchar 字段中。现在我们存储的行比过去多得多,并且正在使用这个字段来汇总使用一个会经常自动刷新的应用程序的数量,我担心性能。
但我也担心在开发周期的后期做出这样的改变的成本。
很快,这个数据库将被客户使用,生成数百万行。所有这些行都不会参与此计算。这些行被分成大约 10,000 行的组,组的每个父级将每 10 分钟左右处理一次,这是计算这些总数的时间。
现在将列类型更改为货币是否值得,包括存储过程、UDT、数据层等?
看起来它可能会对性能产生影响,但不幸的是,我无法用我必须进行性能测试的资源生成足够的数量,这将是现实的。所以我希望有人有字符串到数字转换的经验,并且可以让我知道一次对 10,000 行进行这种转换是否会出现问题。
我有一张大表,其结构与此类似:
Id bigint primary key
Sequence int
Parent int foreign key
Data1 varchar(20)
Data2 varchar(20)
Data3 varchar(20)
Data4 varchar(20)
Data5 varchar(20)
Run Code Online (Sandbox Code Playgroud)
数据 1-5 是文本字段(主要是数字和破折号),可用于帮助防止意外记录重复项,但数据实际上偶尔会重复。我们必须让用户确认是的,它是重复的。
对于数百万行,这种重复检查可能非常耗时。我的任务是确保我们可以处理将我们保存在这个数据库中的数据量增加三倍。以前的开发人员告诉我,当前的流程无法处理那么多数据(当然,处理数据的内容比我在这里包括的要多得多,尽管查找重复项的实际查询非常简单系统的这一部分显然对额外的延迟很敏感)。我自己没有做过实验来证明这一点,但我相信他们的判断,无论如何我都想尽可能地减少影响。不幸的是,直到过程的后期,我才可以测试大量的数据。
所有 5 个字段都必须匹配才能算作重复。我怀疑这永远不会改变,但有人告诉我,在可预见的未来,所有 5 个都必须完全匹配。我在想,通过添加一个作为组合值散列的索引列,我将能够更快地找到潜在的重复项。不过,我仍然需要比较各个值以解决哈希冲突。通过结合这些价值本身,我会得到什么吗?那么一个散列列和一个包含所有 5 个值的分隔字符串中的单个列,我用来比较而不是分别比较每个值?
似乎只有当 varchar 不与行的其余部分一起存储时,我才会受益,我一直认为它们是。然而,情况似乎并非如此。我很难找到特定信息,但似乎如果我的行少于 8060 字节,则将在行中分配完整的 20 个字符。只有当行超过 8060 时,才会选择一些 varchar 列移动到单独的页面中。
任何解释如何存储小型 varchars 的文档,以及关于是否将列组合成单个列是否会对性能产生影响的任何建议,都将不胜感激。
编辑:该表将有数百万行(例如估计为 1000 万行)。每行的最大长度肯定会小于 8060 字节,但我现在不能给你一个确切的数字。