相关疑难解决方法(0)

Sequential Guid相对于标准Guid的性能提升有哪些?

当在数据库中用作主键时,有人曾测量过Sequential Guid与Standard Guid的性能吗?

database guid primary-key

65
推荐指数
5
解决办法
3万
查看次数

CQRS和主键:guid与否?

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

service.SubmitCommand(new AddUserCommand() { UserId = key, ... });
Run Code Online (Sandbox Code Playgroud)

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

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

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

非常感谢!

路德

c# performance guid key cqrs

11
推荐指数
3
解决办法
2069
查看次数

建筑问题

由于上一篇文章(架构:简单的CQS),我一直在思考如何构建一个足够灵活的简单系统,以便以后扩展.

换句话说:我现在不认为需要一个完整的CQRS,但是如果需要的话,我希望以后能够很容易地发展它.

所以我在考虑将命令与查询分开,但两者都基于相同的数据库.

查询部分很简单:基于视图的WCF数据服务,可以轻松查询数据.没什么特别的.

命令部分更难,这里有一个想法:命令当然是以异步方式执行的,因此它们不会返回结果.但是,我的ASP.NET MVC站点的控制器通常需要来自命令的反馈(例如,如果成员的注册成功与否).因此,如果控制器发送命令,它还会生成与命令属性一起传递的事务ID(guid).命令服务接收此命令,将其放入数据库中具有状态'processing'的事务表中,并执行(使用DDD原则).执行后,事务表将更新,以便状态变为"已完成"或"失败",以及其他更详细的信息,如生成的主键.

同时,该站点使用QueryService来轮询此事务的状态,直到它收到"已完成"或"失败",然后它可以根据此结果继续工作.如果轮询事务表并且结果为"已完成"或"失败",则删除该条目.

副作用是我不需要guid作为我的实体的键,这对性能和大小来说是一件好事.

在大多数情况下,可能不需要这种轮询机制,但如果需要则可以.接口的设计考虑了CQS,因此对未来开放.

你认为这种方法有什么缺陷吗?其他想法或建议?

谢谢!

路德

.net c# architecture cqrs asp.net-mvc-3

6
推荐指数
1
解决办法
425
查看次数

标签 统计

c# ×2

cqrs ×2

guid ×2

.net ×1

architecture ×1

asp.net-mvc-3 ×1

database ×1

key ×1

performance ×1

primary-key ×1