我正在建立各种排队机制.有需要处理的数据行和状态标志.我正在使用一个update .. returning
条款来管理它:
UPDATE stuff
SET computed = 'working'
WHERE id = (SELECT id from STUFF WHERE computed IS NULL LIMIT 1)
RETURNING *
Run Code Online (Sandbox Code Playgroud)
嵌套的选择部分是否与更新锁相同,或者我是否有竞争条件?如果是这样,内部选择需要是select for update
吗?
postgresql concurrency multithreading race-condition transaction-isolation
我在某个地方跑过去提到做一个emit(key, doc)
会增加索引构建的时间(或者那种效果).
有什么好处给它,没有任何理由不只是经常做emit(key, null)
,然后include_docs = true
?
我很困惑:这几乎是一个RoR动作邮件程序指南的复制/粘贴,但它会引发语法错误:
class Contact < ActionMailer::Base
def contact a_name, a_company, a_phone, a_email, a_comments
subject "Contact request from #{name}"
recipients "some@address.com"
from "some_other@address.com"
sent_on Time.now
body { :name => a_name, :company => a_company, :phone => a_phone, :email => a_email, :comments => a_comments }
end
end
Run Code Online (Sandbox Code Playgroud)
错误是:
app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting '}' body { :name => a_name, :company => a_company... ^ app/models/contact.rb:9: syntax error, unexpected tASSOC, expecting tCOLON2 or '[' or '.' ...{ :name => a_name, :company => a_company, :phone => …
Run Code Online (Sandbox Code Playgroud) 根本问题 - 假设我的文档有"类别"和时间戳.如果我希望"foo"类别中的所有文档的时间戳都在过去两小时内,那么很简单:
function (doc) {
emit([doc.category, doc.timestamp], null);
}
Run Code Online (Sandbox Code Playgroud)
然后查询为
GET server:5894/.../myview?startKey=[foo, |now - 2 hours|]&endkey=[foo, |now|]
Run Code Online (Sandbox Code Playgroud)
问题来自于我在过去两小时内想要类别为foo或bar的东西.如果我不关心时间,我可以通过按键集合直接按键.不幸的是,我对范围没有这样的选择.
在此期间我最终做的是将时间戳四舍五入为两小时的块,然后将查询多路复用:
POST server:5894/.../myview
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]]
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是如果我想回去大量的时间(与块大小的关系)会变得混乱.
有没有办法将多个startKey/endKey对发送到视图,类似于键:[]数组可以发布键?
我们遇到了性能问题,一个潜在的罪魁祸首是集中使用易失性单例.具体代码是表单
class foo {
static volatile instance;
static object l = new object();
public static foo Instance {
if (instance == null)
lock(l) {
if (instance == null)
instance = new foo();
}
return foo();
}
}
Run Code Online (Sandbox Code Playgroud)
这是在一个8路的盒子上运行,我们看到上下文切换到每秒500,000的调整.典型的系统资源很好 - 25%cpu util,25%内存util,低IO,无分页等.
使用volatile字段是否会导致内存屏障或任何类型的cpu缓存重新加载?或者它只是每次都追踪主存储器,仅用于该字段?
我有一个用F#编写的库,由C#和F#使用.此库foo
在模块中定义bar
名称空间中的类random
:
#light
namespace random
module bar
type foo() = ...
Run Code Online (Sandbox Code Playgroud)
现在,当我去消费类型时random.foo.bar
,C#intellisense将其视为类型bar
,嵌套在类型中random.foo
.
问题是:C#将外部可消耗代码定义到模块而不是命名空间中是否有优势?我知道模块是分组函数的好方法,但是类呢?
简单的lambda表达式是否内联?
我有一种趋势(感谢f#和其他功能性的尝试)将单个函数中存在的重复代码封装到lambda中,然后调用它.我很好奇,如果我因此导致运行时开销:
var foo = a + b;
var bar = a + b;
Run Code Online (Sandbox Code Playgroud)
v
Func<T1, T2> op = () => a + b;
var foo = op();
var bar = op();
Run Code Online (Sandbox Code Playgroud)
哪一个运行成本更高?
我在尝试打开 2 个单独的活动时发生了 ANR。非常零星,只有某些用户无法在我们的任何测试硬件上进行复制。两份报告都有一系列不起眼的线程,我们的两个后台线程正确地等待它们的通知程序锁。主线程在这两种情况下都这样做:
"main" prio=5 tid=1 NATIVE
| group="main" sCount=1 dsCount=0 obj=0x41790710 self=0x41775c90
| sysTid=347 nice=0 sched=0/0 cgrp=apps handle=1074003964
| state=S schedstat=( 0 0 0 ) utm=10817 stm=2453 core=0
#00 pc 0001b6e4 /system/lib/libc.so (__ioctl+8)
#01 pc 0002be67 /system/lib/libc.so (ioctl+14)
#02 pc 0001b929 /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+140)
#03 pc 0001c0c7 /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+154)
#04 pc 00001451 /system/lib/libsystem_server.so (system_init+384)
#05 pc 00020b4c /system/lib/libdvm.so (dvmPlatformInvoke+112)
#06 pc 000516ab /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
#07 pc 00029fe0 /system/lib/libdvm.so
#08 pc 0002e9a4 /system/lib/libdvm.so (dvmInterpret(Thread*, …
Run Code Online (Sandbox Code Playgroud) 我正在实现一个通用接口(特别是iqueryprovider).在某些时候,我被迫返回一个通用结果,我需要从一些内部接口获取:
public TResult Execute<TResult>(...) {
return something.Foo<TResult>();
}
Run Code Online (Sandbox Code Playgroud)
什么东西.Foo是
public T Foo<T>() where T: MyBaseClass, new() {
...
}
Run Code Online (Sandbox Code Playgroud)
这当然会爆炸,因为外部定义的TResult与内部定义的T没有相同的类型限制.问题是:有没有办法让TResult适合Foo?我可以以某种方式明确测试这两个条件并强制类型变量吗?
我正在尝试模式匹配我关心SQL生成的几种类型.理想情况下我想这样做:
let rec getSafeValue record (prop: PropertyInfo) =
match prop.GetValue(record, null) with
| :? string as str -> "'" + str + "'"
| :? Option<_> as opt ->
match opt with
| Some v -> getSafeValue v prop
| None -> "null"
| _ as v -> v.ToString()
Run Code Online (Sandbox Code Playgroud)
问题是,在这里,类型参数Option<_>
获取约束以匹配,record
最终只是obj
.
我知道我可以做一些基于反射的检查(检查它是一个通用类型,并且它是基于名称的选项类型),但我宁愿避免这种情况,如果可能的话.
c# ×3
couchdb ×2
f# ×2
android ×1
concurrency ×1
generics ×1
postgresql ×1
ruby ×1
volatile ×1