Tag: guid

如果我使用GUID作为主键,COMB GUID是否是Rails 3.1的好主意?

我正在使用Rails 3.1和PostgreSQL 8.4。 假设我想要/需要使用GUID主键。 一个潜在的缺点是索引碎片。 在MS SQL中,推荐的解决方案是使用特殊的顺序GUID。 顺序GUID的一种方法是COMBination GUID,它在GUID末尾用5字节时间戳替换MAC地址部分。 这有一些主流采用:COMB在NHibernate( NHibernate / Id / GuidCombGenerator.cs )中本机可用。 我想我已经弄清楚如何在Rails中创建COMB GUID(在UUIDTools 2.1.2 gem的帮助下),但它留下了一些悬而未决的问题: 当PRIMARY KEY是UUID类型时,PostgreSQL会遭受索引碎片吗? 如果GUID的低位6字节是连续的,是否可以避免碎片? 下面实现的COMB GUID是否是在Rails中创建顺序GUID的可接受,可靠的方法? 谢谢你的想法。 create_contacts.rb migration class CreateContacts false do |t| t.column :id, :uuid, :null => false # manually create :id with underlying DB type UUID t.string :first_name t.string :last_name t.string :email t.timestamps […]

如何使用Ruby中的自定义字符集将UUID转换为字符串?

我想根据此处的规范创建一个有效的IFC GUID(IfcGloballyUniqueId): http : //www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ifcutilityresource/lexical/ifcgloballyuniqueid.htm 它基本上是一个UUID或GUID(128位)映射到一组22个字符,以限制文本文件中的存储空间。 我目前有这个解决方法,但它只是一个近似值: guid = ”;22.times{|i|guid<<'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$'[rand(64)]} 最好使用ruby SecureRandom生成128位UUID,如本例所示( https://ruby-doc.org/stdlib-2.3.0/libdoc/securerandom/rdoc/SecureRandom.html ): SecureRandom.uuid #=> “2d931510-d99f-494a-8c67-87feb05e1594” 根据以下格式,此UUID需要映射到长度为22个字符的字符串: 1 2 3 4 5 6 0123456789012345678901234567890123456789012345678901234567890123 “0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$”; 我完全不明白这一点。 如果将32个字符的长hex数转换为128个字符长的二进制数,则分为22组6位(除了获得剩余的2位的一个?),每个都可以转换为十进制数从0到64? 然后又可以用转换表中的相应字符替换? 我希望有人可以validation我是否在这里正确的轨道。 如果我是,那么Ruby中是否有一种计算速度更快的方法将128位数转换为22位0-64而不是使用所有这些单独的转换? 编辑 :对于有同样问题的人,这是我现在的解决方案: require ‘securerandom’ # possible characters in GUID guid64 = ‘0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$’ guid = “” # SecureRandom.uuid: creates a 128 bit UUID hex string […]

ruby base64以2位字符开头编码128位数,以防止结尾填充

这个问题是我上一个问题的后续问题: 如何在Ruby中使用自定义字符集将UUID转换为字符串? 但我会尝试将其作为一个单独的具体问题来制定。 我有一个Ruby 128位UUID作为hex值: SecureRandom.uuid #=> “2d931510-d99f-494a-8c67-87feb05e1594” 如果我正确地获得了IFC规范( http://www.buildingsmart-tech.org/ifc/IFC2x3/TC1/html/ifcutilityresource/lexical/ifcgloballyuniqueid.htm ),我想对Base64进行编码,而不是在最后,我希望输出以2位字符(4个选项)开头,而不是6位(64个选项需要)。 这样我认为我最终可以得到一个22个字符的字符串(1个2位,6个中的21个,总共128位)。 是否有可能以这种方式调整Ruby base64?