我有一个包含~50K行的数据库表,每行代表一个需要完成的工作.我有一个程序从数据库中提取作业,完成工作并将结果放回到数据库中.(这个系统现在正在运行)
现在我想允许多个处理任务来完成工作,但要确保没有任务完成两次(作为性能问题而不是这会导致其他问题).因为访问是通过sproce进行的,我现在的目的是用看起来像这样的东西替换所说的sproce
update tbl
set owner = connection_id()
where available and owner is null limit 1;
select stuff
from tbl
where owner = connection_id();
Run Code Online (Sandbox Code Playgroud)
BTW; 工作人员的任务可能会在获得工作和提交结果之间失去联系.此外,我不认为DB甚至会接近瓶颈,除非我把那部分搞砸了(每分钟约5个工作)
这有什么问题吗?有一个更好的方法吗?
注意:"数据库作为IPC反模式"在这里只是略微适用,因为1)我没有做IPC(没有生成行的过程,它们现在都已存在)和2)描述的主要抱怨反模式是因为进程等待消息导致数据库上出现不必要的负载(在我的情况下,如果没有消息,一切都可以在一切都完成时关闭)
如果有人在某个月的第一周或最后一周说某些事情,你会如何定义这个范围?
我正在研究一个需要以直观的方式处理这类事情的图书馆,但我的直觉并没有声称一个案例或另一个案例.
我可以让它选择不同的行为,但仍然需要一个良好的默认值.
举一个具体的例子,我将随机选择一个月:2008年7月
s m t w r f s
--------------------
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Run Code Online (Sandbox Code Playgroud)
(注意:我假设一周从星期日开始,但问题也可以在周一提出)
什么跨度是这个月的第一周?
第二周是第一个权利之后的第7天?
这个月的最后一周有多长?
非维基评论欢迎
我想知道是否有像Boost Format这样的库,但它支持命名参数而不是位置参数.这是一个常见的习惯用法,例如Python,你有一个上下文来格式化字符串,可能会或可能不会使用所有可用的参数,例如
mouse_state = {}
mouse_state['button'] = 0
mouse_state['x'] = 50
mouse_state['y'] = 30
#...
"You clicked %(button)s at %(x)d,%(y)d." % mouse_state
"Targeting %(x)d, %(y)d." % mouse_state
Run Code Online (Sandbox Code Playgroud)
是否有任何库提供最后两行的功能?我希望它能提供类似以下的API:
PrintFMap(string format, map<string, string> args);
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索中,我发现许多库提供了位置参数的变化,但没有一个支持命名参数.理想情况下,库具有很少的依赖性,因此我可以轻松地将其放入我的代码中.C++不会像收集命名参数那样惯用,但可能有人在那里比我想得更多.
性能很重要,特别是我希望保持内存分配(在C++中总是很棘手),因为这可能在没有虚拟内存的设备上运行.但是,即使从一个缓慢的开始,也可能比从头开始自己编写更快.
我有一个用例,我将处理本地文件路径(例如c:\foo\bar.txt)和URI(例如http://somehost.com/fiz/baz).我也将处理相对和绝对路径,所以我需要像Path.Combine朋友一样的功能.
我应该使用现有的C#类型吗?该URI类型可能会奏效,但在路过一目了然,它似乎只是URI.
对于所有熟悉D编程语言的人来说,如何在嵌入式实时环境中使用它?我知道它的原始设计不是针对实时嵌入式环境的,但这个问题更多的是关于如何实现实时功能.
哪种语言结构必不可少?
您认为哪些结构会出现问题?
有没有人在嵌入式系统中成功使用它?
任何其他想法或建议都会很棒.
尝试进行线性回归的系统有多大是合理的?
具体来说:我有一个约300K采样点和~1200个线性项的系统.这在计算上是否可行?
这个问题有一个附加的约束.
我愿意允许不均匀的选择,只要它不偏不倚.
鉴于" 集合通常实现为二叉搜索树 ",我希望它们包含某种深度或大小信息以进行平衡,我希望你可以对树进行某种加权随机游走.但是,我不知道有任何远程可移植的方式来做到这一点.
编辑:约束不是分摊的时间.
我在我的项目中遇到以下错误:
error: use of deleted function ‘C::C(int)’ note: ‘C::C(int)’ is implicitly deleted because the default definition would be ill-formed: error: use of deleted function ‘M::M()’
这是我正在使用的代码:
struct M {
M(int){}
M() = delete; // Allowing this would work.
};
struct B {
B(int) {}
B() = delete;
};
struct C : public B {
using B::B;
M n = {5};
// C(int i) : B(i) {} // Adding this would work
};
C c{1};
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会这样?
很明显,语言愿意在继承的构造函数的末尾添加更多的初始化(因为它愿意调用默认的构造函数).显然,它愿意隐式地将对非默认构造函数(类初始化)的调用添加到显式定义的构造函数的末尾.但由于某种原因,我不明白,它不愿意同时做这两件事.
根据这个问题,完美转发不够完美,不应该在这里使用.
注意:在实际情况下,构造函数 …
在没有考虑太多的情况下,在我看来,一大堆Prolog的功能可以作为关系演算(又称SQL)来实现.
有没有人听说过任何自动将Prolog转换为SQL的工具?