小编Arn*_*sen的帖子

C#的跨平台嵌入式数据库/键值存储

我正在寻找一个快速的,可嵌入的键/值存储,其中包含可以在.NET和mono中使用的密钥集合(或简单的可嵌入数据库)上的游标语义.需要它是开源的,更喜欢MIT或Apache风格的许可证而不是GPL许可证.只要二进制文件可用于Windows和Linux,就不要反对需要编写绑定的库.

考虑的选项:

  • SQLite - 具有绑定和本机实现,但是单线程并不是那么快
  • 嵌入式InnoDB - 我找不到.NET绑定,它是GPLv2
  • Berkley DB - 我找不到.NET绑定
  • 东京内阁 - 没有.NET绑定我可以找到并在Windows上构建有问题
  • MadCow内存映射数据结构 - GPLv2

是否有比上述更好的选项,我缺少,或上述我不知道的绑定?

更新:使用Oracle的官方BDB绑定4.8和5.0,但无法让它们在mono下工作.还有一些其他问题(BDB的C#驱动程序仍然不成熟).写了一篇名为Firkin(http://github.com/sdether/Firkin)商店的BitCask灵感K/V商店,现在改为使用它.

.net c# embedded-database nosql

7
推荐指数
1
解决办法
2860
查看次数

使用protobuf-net反序列化当前流位置的类型

我将几个对象序列化为一个流,但是当我尝试将它们读回来时,除了最后一个对象之外我似乎无法得到任何东西:

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只是一个未初始化的实例.这是预期的行为,如果是这样,您如何从流中的随机位置反序列化对象?

c# protobuf-net

7
推荐指数
1
解决办法
2210
查看次数

在node.js应用程序中生成atom或rss feed的最佳方法是什么

我正在尝试使用express.js将newsfeeds添加到node.js应用程序中,我找不到采用json模型并将其转换为atom或rss feed的无痛方法.我提出的最佳解决方案是使用Xml库(在node.js上也不那么热)或EJS模板并手动构建它.

似乎有很多代码可以将rss/atom解析为json,但不是为了转向另一个方向.我错过了什么吗?

rss json node.js atom-feed

6
推荐指数
2
解决办法
5191
查看次数

C#4.0动态对象是否具有一些鸭子打字功能?

根据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的现有材料中找不到类似的东西,但它似乎是动态范例的逻辑扩展.有更多信息的人?

duck-typing dynamic c#-4.0

5
推荐指数
1
解决办法
750
查看次数

寻找磁盘绑定的b-tree示例

也许我的google-foo只是不适合鼻烟,但我想玩一个绑定到磁盘的b-tree算法.由于大多数教程和示例都在内存中,因此它们假设随机访问内存,其中树中的更改节点足够简单,但除了I/O密集型重写或使用内存映射文件之外,我无法想到一个好的做法.

理论会很好,C#或Java会更好.

编辑:我为缺乏清晰度而道歉.我不是在寻找要使用的产品或代码库,而是一个示例或说明性的代码库,以便更好地理解如何构建磁盘支持的b树.

c# algorithm b-tree disk

5
推荐指数
1
解决办法
2582
查看次数

没有TaskCompletionSource的任务链接?

我正在将一些异步/等待代码转换为链式任务,因此我可以在已发布的框架中使用它.等待代码看起来像这样

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)

我希望链接InvokeMemorize返回由此产生的任务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

c# task-parallel-library async-ctp

5
推荐指数
1
解决办法
2344
查看次数

通过函数应用程序解析器组合器发出信号失败

我需要对解析器匹配进行比标准符号允许的更复杂的语法检查,并且我目前正在函数应用程序中执行它^^.示例简化方案是检查重复的关键字:

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 parser-combinators

5
推荐指数
1
解决办法
70
查看次数

为什么我们必须显式指定ClassTag类型类

现在scala已经使用类型类迭代了JVM 类型的擦除修复ClassTag,为什么它是一个选择加入,而不是让编译器总是捕获运行时检查的类型签名.使它具有隐式参数化类型约束将使得classTag[T]无论泛型参数声明如何都可以调用.

编辑:我应该澄清,我并不是说scala应该改变幕后的签名,总是包含在内ClassTag.相反,我的意思是,因为ClassTag显示scala可以捕获运行时类型信息并因此避免类型擦除限制,为什么不能将该捕获隐含为编译器的一部分,以便该信息始终在scala代码中可用?

我怀疑它是向后兼容性,java生态系统兼容性,二进制大小或运行时开销相关,但这些只是猜测.

scala typeclass scala-reflect

5
推荐指数
1
解决办法
796
查看次数

ZeroMQ模式用于基于空闲的工作负载平衡工作

我有一个生产者和n个工人,我只想在他们还没有处理工作单元的时候工作,我很难找到一个好的零模式.

1)REQ/REP

生产者是请求者并创建与每个工作者的连接.它跟踪哪个工人忙碌,轮询闲置工人

问题:

  • 如何通知响应并仍然能够将新工作发送给空闲工作者而不将生产线中的线程专用于每个工作者?

2)按下/拉

生产者推入一个所有工作者都关闭的套接字,工作者进入生产者监听的另一个套接字.

问题:

  • 没有工人闲置的概念,即工作被困在长期工作单位之后

3)PUB/SUB

不首先,因为没有办法确保工作不会丢失

4)反向REQ/REP

每个工作者都是REQ结束,并从生产者请求工作,然后在完成工作时发送另一个请求

问题:

  • 制作人必须阻止工作请求,直到有工作(因为每个人recv都必须与a配对send).这可以防止工人完成工作
  • 可以使用单独的完成通道进行修复,但生产者仍需要一些轮询机制来检测新工作并保持在同一个线程上.

5)每个工人的配对

每个工人都有自己的PAIR连接,允许独立发送工作和收到结果

问题:

  • 相同的问题REQ/ REP与要求每个工人线程

尽管zeroMQ是非阻塞/异步的,但是我找不到允许我的代码同步的模式,而不是在许多专用线程中阻塞或者在更少的情况下轮询自旋循环.这对于zeroMQ来说不是一个好的用例吗?

nonblocking asyncsocket zeromq

5
推荐指数
2
解决办法
5785
查看次数

import语句中的箭头有什么作用?

import在一些发现了以下内容scala:

import Predef.{println => _, _}
Run Code Online (Sandbox Code Playgroud)

怎么=>办?

scala

5
推荐指数
1
解决办法
441
查看次数