我的数据库中有一堆网页内容,链接如下:
<a href="/11ecfdc5-d28d-4121-b1c9-1f898ac0b72e">Link</a>
Run Code Online (Sandbox Code Playgroud)
Guid唯一标识符是同一数据库中另一个页面的ID .
我想抓取这些页面并检查链接是否损坏.
为此,我需要一个可以返回页面上所有Guid列表的函数:
Function FindGuids(ByVal Text As String) As Collections.Generic.List(Of Guid)
...
End Function
我认为这是正则表达式的工作.但是,我不知道语法.
我想在我的网站上创建随机文件夹名称来存储图像和缩略图,但是我没有使用生成的guid的完整版本,而是考虑使用它的一部分,可能只是前8个字符,可能还有base64编码它.我担心可能的碰撞.
有人能指出我是否是一个好主意的正确方向?如果我想将名称保留在一定数量的字符下,是否有可以使用的替代解决方案?
更新:我试图远离path.GetRandomFileName,因为它使用原始guid并且它不是12个字符长...
我正在尝试使用sscanf将字符串转换为GUID:
GUID guid;
sscanf( "11111111-2222-3333-4455-667788995511", "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
&guid.Data1, &guid.Data2, &guid.Data3,
&guid.Data4[0], &guid.Data4[1], &guid.Data4[2],
&guid.Data4[3], &guid.Data4[4], &guid.Data4[5],
&guid.Data4[6], &guid.Data4[7]);
Run Code Online (Sandbox Code Playgroud)
但是,在运行时,它会失败并以"错误:命令失败"退出.为什么?怎么解决?
我不想用/ clr编译所以不能使用System.
我有一个外部数据库,正在向我提供信息.一个将其数据保存为本机GUID格式,而我的其他数据源提供标准.NET GUID格式字符串.
有没有一种整洁的方式从Native GUID转换为GUID结构?
还有任何验证位来确定提供的值是否为Native GUID?如果有的话我似乎找不到任何东西.
区别如下:
typedef struct _GUID
{
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
Run Code Online (Sandbox Code Playgroud)
Data1,Data2和Data3的字节顺序相反,但Data4保持不变,请参阅http://en.wikipedia.org/wiki/Globally_unique_identifier了解更多信息
Windows Server 2008 R2 Enterprise,SQL Server 2008 X64,SP3,开发人员版
我构建并动态执行(通过sp_executesql)一个BULK INSERT命令.一般形式是:
BULK INSERT #HeaderRowCheck
from "\\Server\Share\Develop\PKelley\StressTesting\101\DataSet.csv"
with
(
lastrow = 1
,rowterminator = '\n'
,tablock
,maxerrors = 0
,errorfile = 'C:\SQL_Packages\TempFiles\#HeaderRowCheck_257626FB-A5CD-41B8-B862-FAF8C591C7A9.log'
)
Run Code Online (Sandbox Code Playgroud)
(错误文件名称基于已配置的本地文件夹,正在加载的表,以及为每个批量插入运行新生成的guid - 它是一个包含在其自己的存储过程中的子例程.)
外部进程(是SQL代理,现在是WCF服务)启动DTEXEC,它启动一个SSIS包,该包调用循环遍历集合的数据库中的存储过程,构建查询,并为每个执行查询.最多可以有四个负载同时从/进入给定数据库,并且SQL实例上的多个数据库可以同时运行 - 尽管历史上,数量一直很低,而且我们通常只有一个实例一次运行它.我们做了很多,并且它已经完成了两年多的完美工作 - 安全性已正确配置,必要的文件和文件夹存在,通常都是这样.(运气?我想不想.)
我们现在正在预测一些严重的工作负载,所以我们正在做一些压力测试,我在其中启动8次运行,每次运行有4个进程,其中一组四个将分开并逐个处理要加载的文件(即最多正在执行32个同步批量插入.就像我说的,压力测试.)低,看,在启动时,一个或多个将在执行过程中失败,并显示如下错误消息:
Error #4861 encountered while loading header information from file "DataSet.csv": Cannot bulk load because the file "C:\SQL_Packages\TempFiles\#HeaderRowCheck_D0070742-76A5-4175-A1A7-16494103EF25.log" could not be opened. Operating system error code 80(The file exists.).
从运行到运行,不会对同一文件,数据集或整体处理点发生错误.
从表面上看,听起来有两个进程试图访问相同的错误文件,这意味着它们会独立生成相同的guid(!).我的理解是,这应该是不可能的.另一种理论是,同时发生了很多事情(可能最多同时运行32个BULK INSERT命令),SQL和/或OS在某种程度上变得混乱(我是DBA,而不是网络管理员).我可以做一个解决方法,构建我的try-catch块以检查错误4861并重试最多三次,但我宁愿避免这样的kludgery.
我已经抛出一个例程,在使用之前将错误文件的名称(使用guid)记录到表中.在多次运行并且多次运行失败后,我看到(a)失败的文件+ guid正在我的表中记录,并且(b)没有记录重复的guid.
任何人都知道可能会发生什么?
菲利普
我已经开始使用GUID而不是主键的自动递增整数.
但是,在开发过程中,我习惯于查询(从SQL管理工作室或可视工作室)数据库,以便查看我的应用程序刚刚插入了什么记录,并且我很生气,因为我无法通过主键desc按顺序排序查看最新记录.
有办法完成这个吗?
我有Guid"UserID",它需要填充Session("UserID"),这是一个String,但格式化为完美转换为Guid.
如果我试试这个,"无法将类型字符串转换为类型Guid"
Dim UserID As New Guid()
If HttpContext.Current.Session("UserID") IsNot Nothing Then
UserID = HttpContext.Current.Session("UserID")
End If
Run Code Online (Sandbox Code Playgroud)
如果我尝试这个"无法将类型字符串转换为类型Guid"
Dim UserID As New Guid()
If HttpContext.Current.Session("UserID") IsNot Nothing Then
UserID = DirectCast(HttpContext.Current.Session("UserID"), Guid)
End If
Run Code Online (Sandbox Code Playgroud)
这会将字符串完美地转换为Guid,但它不能在If语句之外访问
If HttpContext.Current.Session("UserID") IsNot Nothing Then
Dim UserID As new Guid(HttpContext.Current.Session("UserID"))
End If
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何在If语句之外定义UserID,然后有条件地分配它
我一直在为这个困境烦恼一段时间,我以为我会接近这个.
关于我的场景的一些背景知识:
我知道,最后一个事实是优化,但我认为它极大地提高了程序的可用性.
不过,我想讨论我唯一识别客户端对象的选项.我首先要强调我尝试过但失败的两个选项,然后是我正在考虑的第三个选项.我希望能够深入了解其他可能的解决方案.
这是我的第一选择.这是一个明显的决定,但有一些明显的缺点.这里的第一个问题是客户端UUID不能也不应该被信任用于此类目的.恶意用户可以轻松强制PK冲突.此外,我的理解是,如果我选择生成UUID客户端,我应该期待更大的碰撞机会.抓那个.
我认为这对我的问题来说是一个棘手但很好的解决方案.PlaylistItem的位置对于给定的播放列表集合是唯一的,并且它可以在客户端和服务器端派生.这似乎是一个很好的解决方案.不幸的是,让我的位置成为PK的一部分打破了我PK的不变性.每当重新排序或删除PlaylistItem时,都需要更新大量的PlaylistItem键.抓那个.
该解决方案类似于上述解决方案,但通过将复合键与位置分离来确保PK是不可变的.这是我正在考虑的当前解决方案.我唯一担心的是恶意用户可能会在发送之前通过修改客户端的自动增加ID来强制冲突.我不认为这种恶意行为会对系统造成任何伤害,而是需要考虑的事情.
好的!你有它.做这一切我是愚蠢的吗?我只是吮吸它并强制我的服务器为我的PlaylistItem对象生成GUID吗?或者,是否可以编写适当的实现?
更新:
我希望在服务器成功保存到数据库之前直观地表示用户的操作,并在保存失败时实现所需的恢复技术.我不确定这是否是傻瓜,但我将通过一个用例场景解释我的推理:
客户想要添加一个新的PlaylistItem.为此,我们会针对创建PlaylistItem的所有必要信息向YouTube API发出请求.在YouTube的API响应后,客户端拥有创建PlaylistItem的所有必要信息,但能够唯一识别它.
此时,用户已经等待了YouTube API的X时间范围.现在,我想在客户端上直观地显示PlaylistItem.如果我选择等待服务器,我现在正在等待X + Y时间帧,然后才能看到成功.在测试中,这种延迟感觉很尴尬.
我的服务器只是亚马逊EC2上的微型实例.我可以通过升级硬件来减少Y时间帧,但我可以通过巧妙的编程完全消除Y. 这是我所面临的困境.
我在我的项目中生成GUID(全局唯一标识符)。我看到了我生成的guid(大约4000个)之间的相似之处,所有guid的第三个数据都以4开头。
ff12e0cf-e541-4463-8a21-ef97842c8847
------------------- ^
为什么第三块总是以4开头?
我需要生成多行带有GUID的xml标签:
<xmltag_10 value="{ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ}"/>
<xmltag_11 value="{ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ}"/>
Run Code Online (Sandbox Code Playgroud)
等等
我在循环中有此行,其中每次迭代都会生成$ guid,并且它会打印guid而不用大括号括起来
Write-Host ('<xmltag_{0} value="{1}"/>' -f $i,$guid)
<xmltag_10 value="ZZZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZZZZZ"/>
Run Code Online (Sandbox Code Playgroud)
添加一组花括号,我得到
Write-Host ('<xmltag_{0} value="{{1}}"/>' -f $i,$guid)
<xmltag_10 value="{1}"/>
Run Code Online (Sandbox Code Playgroud)
如何逃避外花括号?我曾尝试使用`{{1}`}逃脱,但我得到了
Error formatting a string: Input string was not in a correct format..
Run Code Online (Sandbox Code Playgroud)
添加我的代码以进行复制和测试:
$i=10
while($i -lt 21)
{
$guid = ([guid]::NewGuid()).ToString().ToUpper();
Write-Host ('<xmltag_{0} value="{1}"/>' -f $i,$guid)
$i++
}
Run Code Online (Sandbox Code Playgroud) guid ×10
.net ×3
vb.net ×3
primary-key ×2
sql-server ×2
asp.net ×1
base64 ×1
bulkinsert ×1
c ×1
c# ×1
c++ ×1
casting ×1
datamapper ×1
escaping ×1
optimization ×1
powershell ×1
regex ×1
scanf ×1