database - 使用(顺序)GUID 是数据库生成 ID 的唯一可行替代方案吗?

标签 database entity-framework ef-code-first sql-server-ce identity-column

我们正在使用 Entity Framework 5 Code First 方法将 MS-Access 数据库迁移到 SQL Server Compact 4.0。我们发现使用数据库生成的整数 ID 非常慢,更糟糕的是,延迟随着数据库的大小呈指数级增加。这使得使用 Identity 列变得不可能,并且在与 Entity Framework 配合使用的 SQL Server Compact 4.0 中似乎该功能的实现很糟糕。

因此,我们进行了一些测试,发现使用客户端生成的 key 将操作插入速度至少提高了 20 倍,插入的指数增长消失了。

现在我们正在寻找生成客户端 ID 的最佳方法。使用 GUID 似乎是最安全的选择,但我读到这会对读取操作产生负面影响。是否有使用客户端生成的自动递增整数的策略?

编辑: 我将进一步调查导致该问题的根本问题。同时我真正的问题可以得到解答吗? :-)

编辑2: 令人恼火的是,似乎没有人相信在 EF 和 SQL Server Compact 4.0 中使用自动 id 速度如此之慢的说法。我发了a separate question通过一个应该很容易重现的概念证明来解决这个问题。

最佳答案

如果您使用 EF 移动大量数据,那么您就做错了。使用 ADO.NET,例如 BULK COPY 方法(使用 SQL CE 使用 SqlCeUpdateableRecord)。您可以使用我的 SqlCeBulkCopy 库来节省一些编码工作。

关于database - 使用(顺序)GUID 是数据库生成 ID 的唯一可行替代方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14740710/

相关文章:

database - couchdb 不断增长(文件大小)

mysql - 在 MySQL 之上安装 MariaDB 5.5

c# - 性能调整 Entity Framework 查询

c# - Entity Framework - 单个事务中的父子表更新

c# - 如何使用 C#-WPF-Entity-Framework Code First 应用程序创建数据库备份?

c# - EF Code First : Duplicate foreign keys (one from name convention, 来自导航属性)

database - Jhipster 和 Postgres 连接

mysql - 快速与从数据库检索记录的传统方式相比

entity-framework - EF 代码优先。父级的子级集合为空

c# - 维护网站的在线 (Azure) 和离线版本