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