在Web场环境中生成UUids

时间:2010-01-20 17:22:48

标签: asp.net guid oracle11g

我打算使用顺序guids作为主键/ uuids,详见下面的帖子

What are the performance improvement of Sequential Guid over standard Guid?

我想知道在Web场环境中跨多个Web服务器生成这些guid是否存在任何问题。我怀疑碰撞的可能性很低,但是Web服务器/时间戳的mac地址会这样 毫无疑问,参与制作这些指导让我停下来。我想知道在高流量网站上是否存在这种可能性,排序会搞砸,使用顺序guid的好处可能会丢失。

请告诉我您的体验。

对于它的价值,我的环境是使用Oracle 11g的ASP.NET 3.5,IIS 7。 顺便提一下,我应该在Oracle中使用guids的数据类型是什么?我知道Sql Server有“uniqueidentifier”

感谢您的建议 -Venu

4 个答案:

答案 0 :(得分:1)

因为我是你所指的帖子的创建者,我可以回答它。

我们正在使用帖子中显示的C#代码(没有修改其中一个回复中的详细说明,我认为可以在另外一点点改进性能)在具有2到8个应用程序服务器的Web场中从未有过并发问题,我相信在Windows核心DLL中实现的SequentialGuid函数已经在不同的机器上创建了不同的guid。

在具有插入不同Guid的不同计算机的数据库操作中,意味着Web场中的每个不同的应用程序服务器将写入将驻留在数据库的特定区域上的数据(即,应用程序服务器将编写guid启动12345和另一个guid以62373开头)所以索引的更新仍然有效,因为页面拆分不会经常发生(或从不)。

因此,根据我的经验,如果您使用相同的策略来生成我在原始邮件中列出的Guid,如果您使用正确的方法生成Guids,那么如果您正在使用Web场环境,则不会发生任何具体问题。

我会以任何方式避免从代码创建Guid以及以集中方式创建Guid。

关于数据类型我们使用char(36)因为我们喜欢浪费大量空间!除了笑话之外,我们决定使用冗长和冗长的方式来编写数据,因为以清晰的格式提供数据可以轻松维护,但您可以使用Oracle GUID或简单地使用RAW(16)数据类型(它们基本相同)并为每一行节省20个字节。为了更轻松地浏览和编辑数据,您可以为客户提供一些编码和解码原始数据的功能,以便查看guid的文本表示。

答案 1 :(得分:0)

Guid for Oracle

答案 2 :(得分:0)

您可能想了解一下NHibernate Guid Comb生成器的工作原理。我从来没有听说过碰撞。

答案 3 :(得分:-1)

为确保您拥有唯一的GUID,只有1台服务器可以成为所述GUID的创建者。

如果内存服务,Oracle不支持创建MS的“Guid for OLE”,但你应该能够利用它生成高度相似的东西:RAWTOHEX(SYS_GUID())

或者,您可以在单个服务器上拥有一个单独的应用程序,该服务器单独负责生成GUID(例如,调用位于特定服务器的Web服务,其唯一目的是生成并返回GUID。

最后,GUIDS 顺序。即使你一个接一个地生成一个,它们也不会以与整数完全相同的方式递增(即,最后一个数字不会在一个步骤中从C-D开始)。排序需要整数或其他一些数字数据类型。