当我使用预准备语句进行多个语句的异步执行时,我得到了带有损坏数据的JSON.键和值完全被破坏了.
首先,当我使用自定义脚本对项目进行压力测试时,我遇到了这个问题.我们正在使用DataStax C++驱动程序并执行来自不同光纤的语句.
然后我试图隔离问题并编写简单的C#程序,它在循环中启动多个任务.每个任务使用一次创建的预准备语句从基础读取数据.对于某些行,结果完全混乱,例如:
预期(由cqlsh提取)
516b00a2-01a7-11e6-8630-c04f49e62c6b |
lucid_lynx_value_45404 |
precise_pangolin_value_618429 |
saucy_salamander_value_302796 |
trusty_tahr_value_873 |
vivid_vervet_value_216045 |
wily_werewolf_value_271991
Run Code Online (Sandbox Code Playgroud)
实际
{
"sa": "516b00a2-01a7-11e6-8630-c04f49e62c6b",
"lucid_lynx": "wily_werewolflue_45404",
"precise_pangolin": "precise_pangolin_value_618429",
"saucy_salamander": "saucy_salamander_value_302796",
"trusty_tahr": "trusty_tahr_value_873",
"vivid_vervet": "vivid_vervet_value_216045",
"wily_werewolf": "wily_werewolf_value_271991"
}
Run Code Online (Sandbox Code Playgroud)
这是C#代码的主要部分.
static void Main(string[] args)
{
const int task_count = 300;
using(var cluster = Cluster.Builder().AddContactPoints(/*contact points here*/).Build())
{
using(var session = cluster.Connect())
{
var prepared = session.Prepare("select json * from test_neptunao.ubuntu where id=?");
var tasks = new Task[task_count];
for(int i = 0; i < …
Run Code Online (Sandbox Code Playgroud) 我正在研究F#项目,我想知道使用Result
F#中的类型返回域错误的最佳做法是什么.我认为有几种方法可以做到:
继承的异常
type DomainException(message) =
inherit Exception(message)
type ItemNotFoundException(item) =
inherit DomainException(sprintf "Item %s is not found" item)
let findItem item =
match item with
| Some x -> Ok x
| None -> Error(new ItemNotFoundException("someitem"))
Run Code Online (Sandbox Code Playgroud)
自定义记录类型
type DomainError =
{ Name : string
Message : string }
let findItem item =
match item with
| Some x -> Ok x
| None ->
Error({ Name = "ItemNotFound"
Message = "Item someitem is not found" })
Run Code Online (Sandbox Code Playgroud)
区分记录类型的联合
type …
Run Code Online (Sandbox Code Playgroud)