理想情况下我想这样做:
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
Run Code Online (Sandbox Code Playgroud)
英文:我想从数据库中获取前10个可用(状态= 0)消息并锁定它们(状态= 10).应首先获得具有更高优先级的消息.
遗憾的是,MS SQL不允许更新中的order by子句.
无论如何如何规避这个?
如何轻松地将blob插入varbinary(MAX)字段?
为了论证:
假设我要插入的东西是:c:\ picture.png表是mytable,列是mypictureblob,地方是recid = 1
我一直在谷歌搜索一段时间,我找不到一个简单的解决方案
谢谢!
在创建必须具有高可靠性的系统服务时,我经常最终编写许多"故障保护"机制,以防万一:通信已经消失(例如与数据库通信),如果电源是什么会发生什么?丢失,服务重新启动....如何拿起碎片并以正确的方式继续(并记住,当拾取碎片时,电源可能会再次出现......)等等
我可以想象,对于不太复杂的系统,一种能满足这一要求的语言非常实用.所以这种语言在任何特定时刻都会记住它的状态,无论电源是否被切断,还是在它停止的地方继续.
这还存在吗?如果是这样,我在哪里可以找到它?如果没有,为什么不能实现呢?在我看来,关键系统非常方便.
ps如果数据库连接丢失,则表示出现问题,需要手动干预.在他恢复连接的那一刻,它会在它停止的地方继续.
编辑:由于讨论似乎已经消失,让我添加几点(等待我可以添加奖金之前的问题)
Erlang的反应现在似乎是最高评价.我知道Erlang并且读过Armstrong(主要创作者)的实用书.这一切都非常好(虽然函数式语言使我的头部旋转所有的递归),但"容错"位不会自动出现.离得很远.Erlang提供了许多监督程序和其他方法来监督进程,并在必要时重新启动它.但是,要正确地制作适合这些结构的东西,你需要成为erlang大师,并且需要让你的软件适合所有这些框架.此外,如果电源掉电,程序员也必须拿起碎片并尝试在下次程序重启时恢复
我正在寻找的东西更简单:
想象一种语言(例如像PHP一样简单),您可以在这里执行诸如数据库查询,操作,执行文件操作,执行文件夹操作等操作.
然而,它的主要特征应该是:如果电源消失,并且事情重新启动它就会从它停止的地方开始(因此它不仅会记住它的位置,它还会记住变量状态).此外,如果它在文件复制过程中停止,它也将正确恢复.等等
最后但并非最不重要的是,如果数据库连接丢失且无法恢复,语言就会暂停,并发出信号(可能是系统日志)供人为干预,然后继续进行.
像这样的语言会使很多服务编程变得容易多了.
编辑:似乎(根据所有评论和答案判断)这样的系统不存在.并且可能不会在近乎可预见的将来由于它(接近?)无法做到正确.
太糟糕了....我不是在寻找这种语言(或框架)让我登上月球,或用它来监视某人的心跳.但对于小型定期服务/任务总是有大量的代码处理边框(在中间的某个地方断电,连接丢失而不是恢复),......在这里暂停,...修复问题,... ..并继续你离开的地方方法会很好.
(或作为评论者指出的检查点方法(如在视频游戏中).设置检查点....如果程序死亡,请在下次重新启动.)
Bounty奖励:在每个人都得出结论的最后一刻可能无法完成,Stephen C带有napier88,它似乎具有我正在寻找的属性.虽然它是一种实验性语言,但它确实可以证明它是可以完成的,并且它是值得研究的东西.
我将着眼于创建自己的框架(可能包含持久状态和快照),以便在.Net或其他VM中添加我正在寻找的功能.
每个人都感谢您的投入和伟大的见解.
在构建需要非常一致且快速响应的系统时,垃圾收集器是否存在潜在问题?
我记得几年前的恐怖故事,典型的例子总是一个动作游戏,你的角色会在中途停止几秒钟,当垃圾收集器进行清理时.
我们还要进一步,但我想知道这是否还是一个问题.我读到了.Net 4中的新垃圾收集器,但它看起来仍然像一个大黑盒子,你只需要相信一切都会好的.
如果你有一个总是必须快速响应的系统,有一个垃圾收集器太大问题,选择更硬核更好,控制它自己像c ++这样的语言?我讨厌它,如果事实证明是一个问题,除了等待新版本的运行时或做一些非常奇怪的事情试图影响收集器之外,基本上几乎没有什么可以做的.
编辑
感谢所有的宝贵资源.但是,似乎大多数文章/自定义gc /解决方案都与Java环境有关..Net是否还具有自定义GC的调整功能或选项?
经过一段时间后主要是.net开发,我需要以跨平台的方式在c ++中工作.
我不想放弃visual studio,所以我希望可以使用visual studio和windows target作为testbuild,然后每隔一段时间通过vm测试linux或mac上的代码.
有没有人有如何最好地设置它的经验?
我特别好奇你如何确保像项目文件这样的东西与*nix平台上可能需要的make文件保持同步.
我对以下内容感到困惑.我有一个大约1000万行的数据库,并且(在其他索引中)1列(campaignid_int)是一个索引.
现在我有700k行,其中campaignid确实是3835
对于所有这些行,connectionid是相同的.
我只是想找出这个连接.
use messaging_db;
SELECT TOP (1) connectionid
FROM outgoing_messages WITH (NOLOCK)
WHERE (campaignid_int = 3835)
Run Code Online (Sandbox Code Playgroud)
现在这个查询大约需要30秒才能执行!
我(用我的小数据库知识)会期望它会占用任何行,并返回给我那个connectionid
如果我为只有1个条目的广告系列测试同样的查询,那么它的速度非常快.因此索引有效.
我该如何解决这个问题,为什么这不起作用?
编辑:
estimated execution plan:
select (0%) - top (0%) - clustered index scan (100%)
Run Code Online (Sandbox Code Playgroud) 我需要解析一个小的"迷你语言",用户可以在我的网站上输入.我想知道lex和jacc或者antlr的对应物是什么用于php的世界.
我正在玩Go并且难以理解为什么json编码和解码对我不起作用
我想我几乎逐字地复制了这些例子,但是输出结果表明编组和解组都没有返回任何数据.他们也没有给出错误.
任何人都可以暗示我哪里出错了?
我的示例代码:去游乐场
package main
import "fmt"
import "encoding/json"
type testStruct struct {
clip string `json:"clip"`
}
func main() {
//unmarshal test
var testJson = "{\"clip\":\"test\"}"
var t testStruct
var jsonData = []byte(testJson)
err := json.Unmarshal(jsonData, &t)
if err != nil {
fmt.Printf("There was an error decoding the json. err = %s", err)
return
}
fmt.Printf("contents of decoded json is: %#v\r\n", t)
//marshal test
t.clip = "test2"
data, err := json.Marshal(&t)
if err != nil {
fmt.Printf("There was …Run Code Online (Sandbox Code Playgroud) 我得到了:
System.Runtime.Serialization.SerializationException:无法找到程序集'myNameSpace,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
当试图反序列化另一个程序中的某些数据而不是我用它序列化的程序时.
经过一些谷歌搜索,我发现显然这只能使用共享程序集完成.
但是,我的数据库已满了这个序列化对象,我需要一个实用程序来解决它们.有没有办法覆盖这种行为,只是提供完全相同的类,并强制它反序列化?
我已经找到了这个片段,但我不明白应该如何以及在哪里放置/使用它.
static constructor() {
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) {
Assembly ayResult = null;
string sShortAssemblyName = args.Name.Split(',')[0];
Assembly[] ayAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly ayAssembly in ayAssemblies) {
if (sShortAssemblyName == ayAssembly.FullName.Split(',')[0]) {
ayResult = ayAssembly;
break;
}
}
return ayResult;
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个API,可以在其中以分块的方式上传文件.
通过这个Stackoverflow问题和答案,内容范围标题似乎最适合此.
但是,在控制器操作中,标头已被剥离,因此我无法访问它.当我使用'range'标头时,它在请求标头集合中可用.
任何人都知道为什么从请求中删除Content-Range?