小编Rüd*_*ehn的帖子

无形的Nat类型的限制

在无形状中,Nat类型表示在类型级别编码自然数的方法.这用于例如固定大小的列表.您甚至可以在类型级别上进行计算,例如,将N元素列表附加到元素列表中,K并返回在编译时已知的具有N+K元素的列表.

这种表示是否能够表示大数,例如1000000或2 53,或者这会导致Scala编译器放弃吗?

scala numbers compiler-optimization shapeless

148
推荐指数
2
解决办法
3686
查看次数

Cassandra:如何使用CQL插入具有良好性能的新宽行

我正在评估卡桑德拉.我正在使用datastax驱动程序和CQL.

我想存储一些具有以下内部结构的数据,其中每个更新的名称都不同.

+-------+-------+-------+-------+-------+-------+
|       | name1 | name2 | name3 | ...   | nameN |
| time  +-------+-------+-------+-------+-------+
|       | val1  | val2  | val3  | ...   | valN  |
+-------+-------+-------+-------|-------+-------+
Run Code Online (Sandbox Code Playgroud)

所以时间应该是列键,name应该是行键.我用来创建这个表的CQL语句是:

CREATE TABLE IF NOT EXISTS test.wide (
  time varchar,
  name varchar,
  value varchar,
  PRIMARY KEY (time,name))
  WITH COMPACT STORAGE
Run Code Online (Sandbox Code Playgroud)

我希望架构以这种方式易于查询.我还必须偶尔存储超过65000行的更新.因此,使用cassandra list/set/map数据类型不是一种选择.

我必须能够每秒处理至少1000个宽行插入,具有变化但大(~1000)个名称/值对的数量.

问题如下:我编写了一个简单的基准测试,可以执行1000个宽行插入,每个插入10000个名称/值对.我使用CQL和datastax驱动程序的性能非常慢,而不使用CQL的版本(使用astyanax)在同一测试集群上具有良好的性能.

我已经阅读了这个相关的问题,并且在这个问题的接受答案中表明你应该能够通过使用批量准备语句以原子方式快速创建一个新的宽行,这些语句可以在cassandra 2中找到.

所以我尝试使用它们,但我的性能仍然很慢(对于在localhost上运行的小型三节点集群,每秒两次插入).我错过了一些明显的东西,还是我必须使用较低级别的thrift API?我已经在astyanax中使用ColumnListMutation实现了相同的插入,我每秒大约有30个插入.

如果我必须使用较低级别的thrift API:

  • 它是否实际上已被弃用,或者它使用起来不方便,因为它的级别较低?

  • 我能用CQL查询用thrift api创建的表吗?

下面是scala中的一个独立代码示例.它只是创建一个批处理语句,用于插入具有10000列的宽行并重复插入性能.

我玩了BatchStatement的选项和一致性级别,但没有什么能让我获得更好的性能.

我唯一的解释是,尽管批处理由预准备语句组成,但条目将逐个添加到行中.


package cassandra

import com.datastax.driver.core._ …
Run Code Online (Sandbox Code Playgroud)

performance cassandra cql3 datastax-java-driver

7
推荐指数
2
解决办法
8794
查看次数

在WebSocket场景中进行状态检查

我有一个加特林场景,我订阅了一个websocket,想检查传入消息的内部一致性。

例如,通过websocket传来的消息是<user>: <sequence number>,我想检查每个用户字符串的序列号是连续的,并且从1开始递增。

a: 1
b: 1
a: 2
b: 2
a: 1 // <= this would be an error because last a was 2, so should be 3
Run Code Online (Sandbox Code Playgroud)

我的第一种方法是将类似a的内容存储Map[String, Int]在会话变量中。但是在我看来,加泰罗尼亚式Web服务API不允许存储非字符串会话变量:

这(只是将通过WS获得的所有内容串联在一起)进行编译:

def updateState(text: String, session: Session): String = {
  session("wsState").as[String] + "\n" + text
}

val scn = scenario("String")
  .exec(ws("Connect WS")
    .open("/indexWS?topic=${topic}")
    .check(
      wsListen
        .within(3600.seconds)
        .until(10)
        .message
        .find
        .transform(updateState _)
        .saveAs("wsState"))
)
Run Code Online (Sandbox Code Playgroud)

但是,只要updateState函数返回字符串以外的内容,它就不再编译

def updateState(text: String, session: Session): Map[String, Int] = {
  session("counts").as[Map[String, Int]] …
Run Code Online (Sandbox Code Playgroud)

scala websocket gatling

5
推荐指数
0
解决办法
995
查看次数

Rust 标准库中的线程局部变量是如何工作的?

Rust 标准库中的线程局部变量是如何工作的?我查看了代码,但在间接中迷失了方向。线程本地存储、OS 依赖模式和快速模式似乎有不同的配置。哪一个是默认的,我该如何选择使用哪一个?特别是,在 crate 中使用线程本地存储对 crate 用户有什么影响?

使用线程本地存储非常简单,生成的程序集看起来非常高效,但如果不完全理解其含义,我无法在库中使用该功能。

我也问过:

multithreading thread-local thread-local-storage rust

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

Rust 中的线程局部变量将使用多少字节?

我想Option<usize>在 Rust 库中使用类型的线程局部变量。对于依赖我的库的板条箱,每个线程将使用多少字节?我对 Rust 1.39 以及面向 Linux 的三种处理器感兴趣:amd64、x86 和 arm32。

multithreading thread-local-storage rust

5
推荐指数
0
解决办法
209
查看次数

从专业课程中获取ClassTag

当我有一个@specialized类时,我会保留有关我的类型是什么原语的信息.是否有快速获取方法ClassTag[T],例如创建数组?

这不能编译,因为没有ClassTag [T]可用

class Foo[@specialized T] {
  def bar: Array[T] = new Array[T]
}
Run Code Online (Sandbox Code Playgroud)

这有效,但我想避免传递ClassTag

class Foo[@specialized T: ClassTag] {
  def bar: Array[T] = new Array[T]
}
Run Code Online (Sandbox Code Playgroud)

这有效,但速度很慢:

class Foo[@specialized T] {
  def bar: Array[T] = new Array[T]

  implicit def classTag: ClassTag[T] = {
    val name = getClass.getName
    if(name.endsWith("$I$sp") ClassTag.Int
    else if(name.endsWith("$L$sp") ClassTag.Long
    else ??? // you get the idea
  }
}
Run Code Online (Sandbox Code Playgroud)

reflection jvm scala

3
推荐指数
1
解决办法
212
查看次数

Java浮点数和整数保持顺序之间的双射

intfloat在Java中都是32位的大小的值.是否可以编写一对函数

int toInt(float f);
float toFloat(int n);
Run Code Online (Sandbox Code Playgroud)

如果f1f2是任意float 非NaN值,i1和i2是任意int值:

  • f1 < f2 当且仅当 toInt(f1) < toInt(f2)
  • f1 > f2 当且仅当 toInt(f1) > toInt(f2)
  • f1 == f2 当且仅当 toInt(f1) == toInt(f2)
  • toInt(toFloat(i1) == i1
  • toFloat(toInt(f1)) == f1

编辑:我已经编辑了问题以排除浮动的NaN值,这要归功于解释这些问题的答案.

java int casting

0
推荐指数
1
解决办法
251
查看次数