何时适合在 Web 项目中使用 UUID?

2024-01-06

我正忙于一个新项目的数据库设计,我不确定是否使用UUID或普通的表唯一自增id。

到目前为止,我建立的网站都在一台服务器上运行,非常大的流量从来都不是太令人担忧的问题。然而,这个 Web 应用程序最终将在多个服务器上同时运行,提供 API,并且需要每秒处理数千个请求,我想确保我现在选择的设计不会在以后削弱任何这些可能性。

当然,我有我的怀疑,并且通过我提出问题的方式应该很清楚,但我想听听那些有更多经验的人的意见,如果我有或没有 UUID,我以后会遇到什么麻烦,并且我的决定真正应该基于什么。

So, in short:我应该考虑哪些因素来决定是否对所有数据库模型使用UUID,以便任何一个对象都可以通过一个字符串唯一标识,以及何时适合使用它作为主键,而不是表按表自动递增?

Note: 我见过这个问题(你什么时候真正被迫使用 UUID 作为设计的一部分?) https://stackoverflow.com/questions/703035/,并阅读所有答案,但他们大多回答“UUID 发生冲突的情况有多罕见”,而不是“何时适合使用它们”。


在决定 UUID 与自动增量 id 时,我考虑的一个因素是它们是否对用户可见,如果是,我是否希望用户知道我拥有该表的数量。例如,如果我不想公开我的网站的注册用户数量,我就不会分配自动增量用户 ID。

为了解决您提出的另一具体问题,仍然可以在多个服务器上使用自动递增 id(尽管不能使用内置 MySQL)。您只需要以不同的偏移量开始所有 id,并相应地递增。也就是说,如果您有 3 个服务器,您可以在 1 处启动服务器 A,在 2 处启动服务器 B,在 3 处启动服务器 C,然后每次将 id 增加 10 而不是 1。这样,您就可以保证不会发生冲突。

最后,我考虑的最后一件事是性能对我的应用程序有多重要。整数比基于字符串的 UUID 更容易索引,因此索引更小、搜索速度更快等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时适合在 Web 项目中使用 UUID? 的相关文章

  • 插入具有多个值的外键

    我想知道 是否有可能创建一个表 其中我有一个接受外键但同一行可能有多个值的表 例如 Employee id name skillid Skill Skillid skillname 这里 Employee 的一个例子可以是 Employee
  • mysql表中的数据非常大。即使 select 语句也需要很多时间

    我正在开发一个数据库 它是一个相当大的数据库 有 13 亿行和大约 35 列 这是我检查表状态后得到的结果 Name Table Name Engine InnoDB Version 10 Row format Compact Rows 1
  • 使用连接池后如何处理过多的并发连接?

    Scenario 假设您有一个拥有大量流量的网站或应用程序 即使使用数据库连接池 性能也会受到真正的打击 站点 应用程序甚至可能崩溃 因为并发连接太多 Question 人们有什么选择来处理这个问题 我的想法 我在想有这个问题的人可以创建多
  • 在android中创建SQLite数据库

    我想在我的应用程序中创建一个 SQLite 数据库 其中包含三个表 我将向表中添加数据并稍后使用它们 但我喜欢保留数据库 就好像第一次安装应用程序时它会检查数据库是否存在 如果存在则更新它 否则如果不存在则创建一个新数据库 此外 我正在制作
  • 在laravel中组合两个不同的无关系数据库表查询进行分页

    我的数据库中有两个不相关的表 我需要将它们合并 以便我可以将其放在我的搜索视图中 但我不知道是否可能 这是我的代码 这news and season表不相关 但它们具有相似的列 我试图将其放入一个对象中以便于分页 是否可以 search r
  • 具有不同组合的产品和产品包的数据库模型

    您将如何设计数据库来实现此功能 考虑一个场景 我们想要创建一个产品关系 封装 假设我们创建一个产品表 prod id prod name prod fee 1 prepaid A 19 usd 2 prepaid B 29 usd 3 pr
  • 如何迁移我的 Heroku 数据库?

    我试过了 heroku rake db migrate and heroku pg push 第一个给我一个 PGerror rake 中止错误 有没有办法用heroku完全重建 重置我的数据库 我似乎在他们的文档中找不到它 编辑 在此之前
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • 研究MySQL、SQLite源码了解RDBMS实现[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道实现数据库是一个很大的话题 但我想通过研究数据库系统的源代码来基本了解数据库系统的工作原理 例如
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • 如何在Word 2010中从SQL数据库检索数据?

    我想用 MS SQL 数据库中的数据填充 Word 文档 这可能吗 如果可能的话 如何实现 我过去曾通过多种方式做到这一点 这取决于用户是从 Microsoft Word 外部还是从 Microsoft Word 内部启动操作 From I
  • 就SQL注入而言,哪种sql查询更安全

    我有两个 SQL 查询正在尝试更新sup and opp每次调用查询时 值分别为 1 和 1 第一个查询 query update disc set sup sup opp opp where did did int sup getnoof
  • 我的用例可以合并到单个查询中而不影响性能吗?

    我主要着眼于改善表现查询的内容以及是否能够解决单一查询对于我的用例之一 解释如下 涉及到2张表 Table 1 EMPLOYEE column1 column2 email1 email2 column5 column6 Table 2 E
  • 当两个表非常相似时,什么时候应该将它们合并?

    我有事件和照片 然后对两者进行评论 现在 我有两个评论表 一个用于与事件相关的评论 另一个用于照片评论 架构与此类似 CREATE TABLE EventComments CommentId int EventId int Comment
  • JPA中如何连接多个数据库?

    我有一个 Spring Boot 应用程序 当前使用 JPA 连接到单个数据库 application properties 文件中的连接详细信息 spring datasource url jdbc oracle thin localho
  • 如何删除MySQL中的所有事件

    如果我想删除某个事件 我需要查询类似的内容 DROP EVENT IF EXISTS eventname 但我找不到一次性删除所有事件的命令 必须一项一项地删除 有没有一次性删除所有事件的SQL DROP EVENT IF EXISTS S
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?

    我试图理解不同的概念数据库分区这就是我的理解 水平分区 分片 将表拆分为不同的表 其中将包含初始表中的行的子集 如果按大陆拆分用户表 我见过很多这样的示例 例如北美的子表 欧洲的另一个子表 ETC 每个分区位于不同的物理位置 理解 机器 据
  • Guid.NewGuid().GetHashCode() 用于数据库

    这对于用作数据存储 SQL Server 的 ID 可靠吗 我会使用 guid 但我更喜欢数字值 A guid更有可能代表一个记录uniquely than a numeric value 随着 GUID 确保全球唯一性 GUID 可以跨数
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来

随机推荐

  • 我正在使用 django table 2 并尝试按照官方文档导出我的表

    我已遵循 django table 2 的官方文档 但它不起作用 我不知道为什么 views py from django shortcuts import render from django tables2 import Request
  • scala 中缩进保留字符串插值

    我想知道在 scala 中进行字符串插值时是否有任何方法可以保留缩进 本质上 我想知道是否可以插入我自己的 StringContext 宏可以解决这个问题 但我想等到它们正式发布 这就是我要的 val x line1 nline2 val
  • 如何从数组中获取多个随机元素?

    我正在研究 如何从 JavaScript 数组中随机访问元素 我发现了很多与此相关的链接 喜欢 从 JavaScript 数组中获取随机项 https stackoverflow com questions 5915096 get rand
  • laravel 使用 google 帐户登录

    我正在制作一个应用程序 我希望用户使用他们的谷歌帐户登录 我有用户 oauth 4 laravel 并且我有这个 用户控制器 php get data from input code Input get code get google se
  • Android 代码截图。明白了,但还不完美

    我正在尝试在 Android 中的代码中截取屏幕截图 实际上 屏幕截图是主RelativeLayout 的位图 屏幕截图已拍摄 但内容显示错误 不遵守 fill parent 等标签 并且图像显示在左上角并具有原始大小 请任何人帮忙 Tha
  • Firefox 在提交按钮中添加 2px 内边距

    您好 我似乎在 Firefox 在提交按钮中添加 2 个额外像素的填充时遇到了一些问题 我已经在 chrome 和 IE9 中对此进行了测试 两种浏览器都可以正常渲染代码 Firefox 似乎在底部添加了 2 个像素填充提交按钮 右上角有钥
  • realloc会对旧指针做什么[重复]

    这个问题在这里已经有答案了 我有一个关于 realloc 函数的问题 应用realloc函数后旧指针的内容会改变吗 代码是 main int a b i a calloc 5 sizeof int for i 0 i lt 5 i a i
  • Android 视图上的投影

    我已经对此进行了一些广泛的代码示例搜索 但找不到任何内容 特别是 我希望向在 ImageView 中使用的 png 可绘制对象添加阴影 这个 png 可绘制对象是一个带有透明角的圆角矩形 有人可以提供一个代码示例 说明如何在代码或 XML
  • Firestore 安全规则 .hasAny(['A', 'B', 'C']) 仍然可以使用吗?

    似乎无法使用 Firestore 安全规则 hasAny 此方法是否已弃用或不再可用 我用它就像 Functions NOT WORKING function isTeamMember teamId userId return get da
  • 从地址抖动中获取坐标

    有人可以指导我在 flutter 中获取地址的坐标吗 我需要在文本框中输入地址并获取该地址的经度和纬度 您可以复制粘贴运行下面的完整代码您可以使用包https pub dev packages geocoder https pub dev
  • 用于命名空间限定的 C++ 预处理器标记粘贴

    我在 gcc 4 7 1 std c 11 中的预处理器标记粘贴运算符上遇到问题 即 考虑以下代码 Create a name for a global map this works define GLOBAL MAP name g map
  • 将 ZipOutputStream 返回到浏览器

    我有一个 ZipOutputStream 我想将其返回到浏览器 我想要的体验是用户单击锚标记 然后为我拥有的 ZipOutputStream 显示文件下载提示 如何将 ZipOutputStream 返回到浏览器 昨天必须做同样的事情 By
  • 为什么 Oracle 表/列/索引名称限制为 30 个字符?

    我可以理解 很多年前会有这种限制 但现在这个限制肯定可以很容易地增加 我们有对象的命名约定 但总会出现达到此限制的情况 特别是在命名外键时 有谁真正知道为什么这不是更大的尺寸 或者是 11 克更大 显然 答案是它将破坏当前未进行防御性编码的
  • JavaScript - 二分搜索每次都会挂起

    我有一个二维数组 如下所示 1 11 23 2 22 52 3 33 61 其中数组按每行中的第一个值排序 我试图在数组中找到一个值close到搜索值 在一定的灵敏度内 这种设置的方式以及灵敏度的值确保数组中只有一个可能的匹配 搜索值是鼠标
  • 将拟合摘要写入 pdf 文件或类似文件中

    我正在循环中对许多数据集进行线性拟合 并将结果绘制在 pdf 文件中 是否可以直接将summary fit 的输出保存在同一个pdf文件中 而不是通过控制台观察大约100个数据集的摘要 LMmodel lt y x fit lt lm LM
  • 我什么时候应该使用前进和移动?

    我有一个对向量进行操作的代码 template
  • PHP:将任何浮点数格式化为十进制扩展

    我想创建一个函数formatFloat 它接受任何浮点并将其格式化为十进制扩展字符串 例如 formatFloat 1 0E 25 10 000 000 000 000 000 000 000 000 formatFloat 1 0E 24
  • 如何将两个 long 相除并得到值?

    我需要计算整数和长整数的概率 但我总是得到0 整数a 234 长b 123453344L 浮动 c a b 如何在 Java 中得到正确的结果 您需要将其中一个投射为float 或将其中一个变量声明为float从头开始 否则 Java 的整
  • 何时适合在 Web 项目中使用 UUID?

    我正忙于一个新项目的数据库设计 我不确定是否使用UUID或普通的表唯一自增id 到目前为止 我建立的网站都在一台服务器上运行 非常大的流量从来都不是太令人担忧的问题 然而 这个 Web 应用程序最终将在多个服务器上同时运行 提供 API 并
  • 自定义控件中的膨胀布局 - 如何?

    我有关于如何在这里创建自定义控件的想法 Android 界面 需要有关使用哪些小部件的建议 https stackoverflow com questions 5891153 android interface need suggestio