c# - CQRS 和主键 : guid or not?

标签 c# performance key guid cqrs

对于我的项目,这是一个潜在的大型网站,我选择将命令界面与查询界面分开。因此,提交命令是不返回结果的单向操作。这意味着客户端必须提供 key ,例如:

service.SubmitCommand(new AddUserCommand() { UserId = key, ... });

显然我不能使用 int 作为主键,所以 Guid 是一个合乎逻辑的选择 - 除了我到处都读到它对性能的影响,这让我很害怕 :)

但后来我还阅读了有关 COMB Guid 的内容,以及它们如何在提供 Guid 的优势的同时仍然具有良好的性能。我还在这里找到了一个实现:Sequential GUID in Linq-to-Sql? .

所以在我做出这个重要决定之前:有人有这方面的经验,建议吗?

非常感谢!

路德

最佳答案

首先,我使用顺序 GUID 作为主键,并且我没有任何性能问题。

大多数测试 Sequential GUID vs INT as primary key 使用批量插入操作并从空闲数据库中选择数据。但在现实生活中,选择和更新是在同一时间发生的。

当您应用 CQRS 时,您不会有批量插入,打开和关闭事务的负担将比 1 个写入查询花费更多的时间。由于您已分离读取存储,因此您在具有 GUID PK 的表上的选择操作将比在统一存储中具有 INT PK 的表上快得多。

此外,异步为您提供消息传递,使您的应用程序比具有阻塞 RPC 调用的系统可以更好地扩展。

考虑到上述情况,选择 GUID 与 INT 在我看来是小菜一碟。

关于c# - CQRS 和主键 : guid or not?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6916056/

相关文章:

Swift 3.1 - .set Values For Keys 和 Firebase 无法检索用户

Mysql,如果表A中存在外键,则向表B中插入新记录

c# - .NET 4.5 中 sslStream 的密码选择

c# - 有没有一种方法可以让类使用反射访问继承自它的类中的字段?

python - Pandas 应用使用最小/最大在可变滚动窗口上执行缓慢

performance - 使用 `Optim` 优化非线性函数(样条近似)会产生低性能

performance - 为什么我们使用链表来解决哈希表中的冲突?

c# - TFS 对象模型 : Do WorkItems keep sessions open?

c# - 如何在事件目录中存储用户图片?

dictionary - 插入 map 时,Go(深)复制键吗?