我正在寻找一个快速的,可嵌入的键/值存储,其中包含可以在.NET和mono中使用的密钥集合(或简单的可嵌入数据库)上的游标语义.需要它是开源的,更喜欢MIT或Apache风格的许可证而不是GPL许可证.只要二进制文件可用于Windows和Linux,就不要反对需要编写绑定的库.
考虑的选项:
是否有比上述更好的选项,我缺少,或上述我不知道的绑定?
更新:使用Oracle的官方BDB绑定4.8和5.0,但无法让它们在mono下工作.还有一些其他问题(BDB的C#驱动程序仍然不成熟).写了一篇名为Firkin(http://github.com/sdether/Firkin)商店的BitCask灵感K/V商店,现在改为使用它.
我将几个对象序列化为一个流,但是当我尝试将它们读回来时,除了最后一个对象之外我似乎无法得到任何东西:
ProtoBuf.Serializer.Serialize(stream, postA1);
ProtoBuf.Serializer.Serialize(stream, postB1);
stream.Position = 0;
var postA2 = ProtoBuf.Serializer.Deserialize<Post>(stream);
var postB2 = ProtoBuf.Serializer.Deserialize<Post>(stream);
Run Code Online (Sandbox Code Playgroud)
第一个反序列化将流移动到结尾,postA2包含postB1的值,而postB2只是一个未初始化的实例.这是预期的行为,如果是这样,您如何从流中的随机位置反序列化对象?
我正在尝试使用express.js将newsfeeds添加到node.js应用程序中,我找不到采用json模型并将其转换为atom或rss feed的无痛方法.我提出的最佳解决方案是使用Xml库(在node.js上也不那么热)或EJS模板并手动构建它.
似乎有很多代码可以将rss/atom解析为json,但不是为了转向另一个方向.我错过了什么吗?
根据Anders的说法,在C#4.0中,我们将获得动态类型或"静态类型是动态的"对象.这将允许任何方法调用解析在运行时而不是编译时发生.但是,是否有设施将动态对象绑定到某种合同(从而也可以获得完整的智能感知),而不是允许对它进行任何调用,即使您知道它不可能有效.
即不仅仅是
dynamic foo = GetSomeDynamicObject();
Run Code Online (Sandbox Code Playgroud)
能够投射或转换它以将其约束为已知合约,例如
IFoo foo2 = foo.To<IFoo>;
Run Code Online (Sandbox Code Playgroud)
甚至只是
IFoo foo2 = foo as IFoo;
Run Code Online (Sandbox Code Playgroud)
在C#4.0的现有材料中找不到类似的东西,但它似乎是动态范例的逻辑扩展.有更多信息的人?
也许我的google-foo只是不适合鼻烟,但我想玩一个绑定到磁盘的b-tree算法.由于大多数教程和示例都在内存中,因此它们假设随机访问内存,其中树中的更改节点足够简单,但除了I/O密集型重写或使用内存映射文件之外,我无法想到一个好的做法.
理论会很好,C#或Java会更好.
编辑:我为缺乏清晰度而道歉.我不是在寻找要使用的产品或代码库,而是一个示例或说明性的代码库,以便更好地理解如何构建磁盘支持的b树.
我正在将一些异步/等待代码转换为链式任务,因此我可以在已发布的框架中使用它.等待代码看起来像这样
public async Task<TraumMessage> Get() {
var message = await Invoke("GET");
var memorized = await message.Memorize();
return memorized;
}
Run Code Online (Sandbox Code Playgroud)
哪里
Task<TraumMessage> Invoke(string verb) {}
Task<TraumMessage> Memorize() {}
Run Code Online (Sandbox Code Playgroud)
我希望链接Invoke并Memorize返回由此产生的任务Memorize,但结果是Task<Task<TraumMessage>.我最终得到的解决方案是TaskCompletionSource<TraumMessage>我的信号:
public Task<TraumMessage> Get() {
var completion = new TaskCompletionSource<TraumMessage>();
Invoke("GET").ContinueWith( t1 => {
if(t1.IsFaulted) {
completion.SetException(t1.Exception);
return;
}
t1.Result.Memorize().ContinueWith( t2 => {
if(t2.IsFaulted) {
completion.SetException(t2.Exception);
return;
}
completion.SetResult(t2.Result);
});
});
return completion.Task;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法完成这个没有TaskCompletionSource?
我需要对解析器匹配进行比标准符号允许的更复杂的语法检查,并且我目前正在函数应用程序中执行它^^.示例简化方案是检查重复的关键字:
def keywords: Parser[List[String]] = "[" ~ repsep(keyword, ",") ~ "]" ^^ {
case _ ~ ks ~ _ =>
ks.groupBy(x => x).filter(_._2.length > 1).keys.toList match {
case Nil => ks
case x => throw new DuplicateKeywordsException(x)
}
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为在我的解析器中会抛出异常,但我希望将失败捕获为ParseResult.Failure捕获它发生的位置的输入.我无法弄清楚如何从一个^^块内发出信号或使用其他一些构造来达到同样的目的.
现在scala已经使用类型类迭代了JVM 类型的擦除修复ClassTag,为什么它是一个选择加入,而不是让编译器总是捕获运行时检查的类型签名.使它具有隐式参数化类型约束将使得classTag[T]无论泛型参数声明如何都可以调用.
编辑:我应该澄清,我并不是说scala应该改变幕后的签名,总是包含在内ClassTag.相反,我的意思是,因为ClassTag显示scala可以捕获运行时类型信息并因此避免类型擦除限制,为什么不能将该捕获隐含为编译器的一部分,以便该信息始终在scala代码中可用?
我怀疑它是向后兼容性,java生态系统兼容性,二进制大小或运行时开销相关,但这些只是猜测.
我有一个生产者和n个工人,我只想在他们还没有处理工作单元的时候工作,我很难找到一个好的零模式.
1)REQ/REP
生产者是请求者并创建与每个工作者的连接.它跟踪哪个工人忙碌,轮询闲置工人
问题:
2)按下/拉
生产者推入一个所有工作者都关闭的套接字,工作者进入生产者监听的另一个套接字.
问题:
3)PUB/SUB
不首先,因为没有办法确保工作不会丢失
4)反向REQ/REP
每个工作者都是REQ结束,并从生产者请求工作,然后在完成工作时发送另一个请求
问题:
recv都必须与a配对send).这可以防止工人完成工作5)每个工人的配对
每个工人都有自己的PAIR连接,允许独立发送工作和收到结果
问题:
REQ/ REP与要求每个工人线程尽管zeroMQ是非阻塞/异步的,但是我找不到允许我的代码同步的模式,而不是在许多专用线程中阻塞或者在更少的情况下轮询自旋循环.这对于zeroMQ来说不是一个好的用例吗?
我import在一些发现了以下内容scala:
import Predef.{println => _, _}
Run Code Online (Sandbox Code Playgroud)
怎么=>办?
c# ×4
scala ×3
.net ×1
algorithm ×1
async-ctp ×1
asyncsocket ×1
atom-feed ×1
b-tree ×1
c#-4.0 ×1
disk ×1
duck-typing ×1
dynamic ×1
json ×1
node.js ×1
nonblocking ×1
nosql ×1
protobuf-net ×1
rss ×1
typeclass ×1
zeromq ×1