标签: guid

使用GUID作为主键的最佳做法是什么,特别是在性能方面?

我有一个应用程序在几乎所有表中使用GUID作为主键,我已经读过使用GUID作为主键时存在性能问题.老实说,我没有看到任何问题,但我即将开始一个新的应用程序,我仍然想使用GUID作为主键,但我想使用复合主键(GUID和可能是另一个字段) .)

我正在使用GUID,因为当您拥有不同的环境(如"生产","测试"和"开发"数据库)以及数据库之间的迁移数据时,它们很好并且易于管理.

我将使用Entity Framework 4.3,我想在将其插入数据库之前在应用程序代码中分配Guid.(即我不想让SQL生成Guid).

创建基于GUID的主键的最佳做法是什么,以避免与此方法相关的假设性能命中?

sql-server database-design entity-framework guid primary-key

311
推荐指数
4
解决办法
15万
查看次数

从Swift在iOS上生成UUID

在我的iOS Swift应用程序中,我想生成随机UUID(GUID)字符串以用作表键,并且此代码段似乎有效:

let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))
Run Code Online (Sandbox Code Playgroud)

这样安全吗?

或者是否有更好的(推荐)方法?

cocoa-touch guid core-foundation ios swift

288
推荐指数
6
解决办法
14万
查看次数

如何测试有效的UUID/GUID?

如何检查变量是否包含有效的UUID/GUID标识符?

我目前只对验证类型1和类型4感兴趣,但它并不限制你的答案.

javascript validation uuid guid

224
推荐指数
11
解决办法
13万
查看次数

Guid全是0(零)?

我正在测试一些WCF服务,它们来回传送带有Guids的对象.在我的网络应用程序测试代码中,我正在执行以下操作:

var responseObject = proxy.CallService(new RequestObject
{
    Data = "misc. data",
    Guid = new Guid()
});
Run Code Online (Sandbox Code Playgroud)

出于某种原因,对新Guid()的调用是生成Guids,其全部为0(零),如下所示:

00000000-0000-0000-0000-000000000000

可能是什么导致了这个?

.net c# wcf web-services guid

224
推荐指数
6
解决办法
9万
查看次数

GUID/UUID数据库密钥的优点和缺点

我曾经在许多数据库系统上工作,如果所有数据库密钥都是GUID/UUID值,那么在数据库之间移动条目会变得更容易.我曾经考虑过几次走这条路,但总会有一些不确定性,特别是在性能和​​未读出电话的URL方面.

有没有人在数据库中广泛使用GUID?通过这种方式我可以获得哪些优势,以及可能存在的陷阱是什么?

database uuid guid

217
推荐指数
7
解决办法
8万
查看次数

如何使用iOS创建GUID/UUID

我希望能够在iPhone和iPad上创建GUID/UUID.

目的是能够为所有唯一的分布式数据创建密钥.有没有办法用iOS SDK做到这一点?

uuid guid ios

207
推荐指数
8
解决办法
11万
查看次数

测试字符串是否为guid而不抛出异常?

我想尝试将字符串转换为Guid,但我不想依赖捕获异常(

  • 出于性能原因 - 例外是昂贵的
  • 出于可用性原因 - 弹出调试器
  • 出于设计原因 - 预期并非例外

换句话说代码:

public static Boolean TryStrToGuid(String s, out Guid value)
{
    try
    {
        value = new Guid(s);
        return true;
    }
    catch (FormatException)
    {
        value = Guid.Empty;
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

不适合.

我会尝试使用RegEx,但由于guid可以括号括起来,括号包裹,没有包装,使其变得困难.

另外,我认为某些Guid值无效(?)


更新1

ChristianK有一个好主意只能抓住FormatException,而不是全部.更改了问题的代码示例以包含建议.


更新2

为什么要担心引发异常?我真的经常期待无效的GUID吗?

答案是肯定的.这就是为什么我使用TryStrToGuid -我期待坏数据.

示例1 可以通过将GUID附加到文件夹名称来指定名称空间扩展.我可能正在解析文件夹名称,检查最终后是否有文本.是一个GUID.

c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old
Run Code Online (Sandbox Code Playgroud)

示例2我可能正在运行一个使用频繁的Web服务器,想要检查一些发布的数据的有效性.我不希望无效数据占用比需要高2-3个数量级的资源.

示例3我可能正在解析用户输入的搜索表达式.

在此输入图像描述

如果他们输入GUID,我想特别处理它们(例如专门搜索该对象,或在响应文本中突出显示并格式化该特定搜索词.)


更新3 - 性能基准

测试转换10,000个好Guids和10,000个坏Guids.

Catch FormatException: …
Run Code Online (Sandbox Code Playgroud)

c# string parsing guid

180
推荐指数
10
解决办法
7万
查看次数

在Rails中创建唯一令牌的最佳方法?

这就是我正在使用的.令牌不一定要被猜测,它更像是一个短网址标识符,而不是其他任何东西,我想保持简短.我已经按照我在网上找到的一些例子,如果发生碰撞,我认为下面的代码会重新创建令牌,但我不确定.不过,我很想看到更好的建议,因为边缘感觉有点粗糙.

def self.create_token
    random_number = SecureRandom.hex(3)
    "1X#{random_number}"

    while Tracker.find_by_token("1X#{random_number}") != nil
      random_number = SecureRandom.hex(3)
      "1X#{random_number}"
    end
    "1X#{random_number}"
  end
Run Code Online (Sandbox Code Playgroud)

我的令牌的数据库列是一个唯一的索引,我也在validates_uniqueness_of :token模型上使用,但因为这些是根据用户在应用程序中的操作自动批量创建的(他们下订单并购买令牌,基本上),它是让应用程序抛出错误是不可行的.

我猜,我也可以减少碰撞的几率,在最后添加另一个字符串,根据时间或类似的东西生成的东西,但我不希望令牌太长.

random guid ruby-on-rails ruby-on-rails-3

154
推荐指数
9
解决办法
11万
查看次数

我应该如何在MySQL表中存储GUID?

我是否使用varchar(36)或有更好的方法吗?

mysql uuid guid

139
推荐指数
8
解决办法
14万
查看次数

在Ruby中生成Guids

我有Guids很容易解决的问题.

特别是,对于密码重置工作流程,我想将Guid令牌发送到用户的电子邮件,并让他们使用令牌重置密码.由于guids是唯一的,这是非常安全的,并且节省了我通过电子邮件发送人员密码,这是有风险的.

我注意到Ruby 有一个Guid宝石 ; 但它看起来很旧,它把东西写入文件系统.

有谁知道可以创建全球唯一标识符的任何其他宝石?

我知道我可以回到:

(0..16).to_a.map{|a| rand(16).to_s(16)}.join 
Run Code Online (Sandbox Code Playgroud)

但它看起来并不像是一个合适的GUID ......

ruby guid

130
推荐指数
7
解决办法
8万
查看次数