我正在实现一个应用程序,其中Oracle 11G和多个其他MySQL数据库中将有一个数据库。至少30分钟后,所有数据库将会彼此同步。最初我想到了将GUID/UUID作为主键,但后来我发现它的缺点并没有多大担忧。
我只想让我的主键独特,性能好,这意味着我当然在寻找索引。请建议我应该保留什么作为我的主键。有必要提一下,我的数据库MySQL将运行在简单的intel corei3上,并且我希望它有一百万条记录;而oracle将在服务器上运行,这不是问题。分布式数据库主键的选择
0
A
回答
1
UUID/GUID存在“随机”问题。这导致难以缓存数据。 “下一个”UUID可以位于表/索引中的任何位置。如果整个数据(或索引)不足以容纳缓存,则可能会导致磁盘命中。
如果您需要在多个服务器中生成ID,最好的方法是使用两部分ID。第一部分是代表id来源的小数字,第二部分是某种形式的序列。
这可以作为两个字段来实现:PRIMARY KEY (machine, seq)
或作为单个数字中的值的组合。示例:机器1的ID以1000000000开始;机器2具有以2000000000开始的ID;等等。(当然,你必须仔细设计数字以避免任何一个部分的空间用完。)
INSERT会在每台机器上打一个“热点”。如果SELECT倾向于获取“最近”的行,那么它们也会触及热点,而不是整个表。
在MySQL中,该化合物PK可能是:
seq ... AUTO_INCREMENT,
machine TINYINT UNSIGNED NOT NULL,
PRIMARY KEY(machine, seq),
INDEX(seq)
是的,这是足以使AUTO_INCREMENT工作。
在MySQL中,单列PK需要某种形式的序列模拟。
相关问题
- 1. Cassandra VS Dynamo数据库主键选择
- 2. 分布式数据库
- 3. 根据主表上的选择部分导出数据库表
- 4. 从数据库表中选择特定的主键
- 5. 选择主键数据类型numeric(18,0)
- 6. oracle数据库的主键格式
- 7. 数据库主键
- 8. 数据库主键
- 9. 选择主键
- 10. 选择主键
- 11. 的SQL Server分布式数据库
- 12. 修改外键以创建分布式数据库
- 13. 数据库主键的数据类型
- 14. 格式化日期选择器发布到MySQL数据库
- 15. 主键选择的性能
- 16. 实施分布式系统/数据库
- 17. Spring MVC - 分布式数据库事务
- 18. Oracle分布式数据库和MSVC
- 19. 分布式数据库使用案例
- 20. 分布式数据库设计
- 21. 分布式数据库同步
- 22. 分布式数据库通信
- 23. 分布式数据库解决方案?
- 24. Granules选择数据库表分区?
- 25. 选择在数据库中部分列
- 26. 数据库选择的选择
- 27. 数据库选择
- 28. 主键+引发数据库模式导致问题的复合主键
- 29. 数据库的选择?
- 30. 为分布式应用程序选择通信库