我有一个SQL Server(2012),我使用Entity Framework(4.1)访问.在数据库中,我有一个名为URL的表,一个独立的进程在其中提供新的URL.URL表中的条目可以处于"新建","处理中"或"已处理"状态.
我需要从不同的计算机访问URL表,检查状态为"新"的URL条目,取第一个并将其标记为"正在处理".
var newUrl = dbEntity.URLs.FirstOrDefault(url => url.StatusID == (int) URLStatus.New);
if(newUrl != null)
{
newUrl.StatusID = (int) URLStatus.InProcess;
dbEntity.SaveChanges();
}
//Process the URL
Run Code Online (Sandbox Code Playgroud)
由于查询和更新不是原子的,我可以读取两个不同的计算机并更新数据库中的相同URL条目.
有没有办法让select-then-update序列原子化以避免这种冲突?
我正在使用Azure队列,并从队列中读取几个不同的进程.
我的系统构建方式假定每条消息只读一次.
这篇Microsoft文章声称Azure队列至少有一次传递保证,这可能意味着两个进程可以从队列中读取相同的消息.
此StackOverflow线程声称,如果我使用GetMessage,则该消息对于隐身超时的所有其他进程变得不可见.
假设我使用GetMessage()并且在DeleteMessage之前从不超过消息不可见时间,我可以假设我只会获得每条消息一次吗?
我正在开发一个自然语言处理(NLP)项目,在该项目中,我使用语法分析器从给定的句子中创建一个语法分析树.
示例输入:我遇到Joe和Jill然后我们去购物
示例输出: [TOP [S [S [NP [PRP I]] [VP [VBD run] [PP [IN into] [NP [NNP Joe] [CC和[NNP Jill]]]]] [CC和] [S [ADVP [RB然后]] [NP [PRP我们]] [VP [VBD去] [NP [NN购物]]]]]]
我正在寻找一个允许我执行复杂查询的C#实用程序:
这是一个Java实用程序,我正在寻找一个C#等价物.
任何帮助将非常感激.
在我的数据库中,我有一个计算列,其中包含一个名为URLString的列的SHA1哈希值,该列保存URL(例如"http://xxxx.com/index.html").
我经常需要查询表以根据URLString列查找特定的URL.该表包含100K,这些查询需要几秒钟(使用SQL Azure).由于URL可能很长,我无法在此列上创建索引(大于450字节).
为了加快速度,我想从C#计算SQL Server哈希字节('SHA1',[URLString])的等效值,并根据此值进行查询.
我尝试了下面的代码,但是我获得的值与数据库计算的值不同.
var urlString = Encoding.ASCII.GetBytes(url.URLString); //UTF8 also fails
var sha1 = new SHA1CryptoServiceProvider();
byte[] hash = sha1.ComputeHash(urlString);
Run Code Online (Sandbox Code Playgroud)
我在这里错过了一些小事吗?
我对其他可以解决相同问题的想法持开放态度(只要SQL Azure支持它们).
示例:在数据库中,URL http://www.whatismyip.org/的自动计算SHA1值为0xAE66CA69A157186A511ED462153D7CA65F0C1BF7.
我有一个Azure Worker角色,它有三种类型的进程:
Task1和Task2无限期运行,如果各自的队列为空则休眠.
我的代码看起来像这样:
SpawnJavaProcesses();
Task.Factory.StartNew(Task1);
Task.Factory.StartNew(Task2);
while(true)
{
//do some trivial sporadic work
Thread.Sleep(60*1000);
}
Run Code Online (Sandbox Code Playgroud)
我的问题:
c# ×4
azure ×2
sql-server ×2
.net ×1
nlp ×1
s-expression ×1
sha ×1
stanford-nlp ×1
t-sql ×1
tree ×1