- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
使用 GOCQL(Golang、Cassandra),我最多发出 128 个请求,然后一切都挂起。我相信我正确发布查询的 getTicksForCassandraKey() 函数,但不确定。 GOCQL 最多只支持 128 个并发查询,所以我一定是做错了什么。所有查询都是读取的。
主要代码为:
inboundChannel := make(chan []bson.M, 30)
maxGoRoutinesCount := 30
chunkSize := int(math.Floor(float64(len(cassandraKeys)) / float64(maxGoRoutinesCount)))
log.Println("Chunk size will be: ", chunkSize)
log.Println("Cassandra Keys length: ", cassandraKeys)
idx := 0
for idx < len(cassandraKeys) {
log.Println("idx: ", idx)
chunkOfKeys := cassandraKeys[idx:(idx + chunkSize)]
idx += chunkSize
go func(keys []string) {
log.Println("Received analysisKey on outbound channel. About to query this many keys: ", len(keys))
//Cassandra session can handle up to 128 concurrent queries
for _, c := range keys {
processedTicks, err := getTicksForCassandraKey(*session, c, startTime)
if err != nil {
log.Println("Error returning.")
return
}
log.Println("Finished query. About to post to inboundChannel for key: ", c)
inboundChannel <- processedTicks
}
}(chunkOfKeys)
}
processedIndex := 0
for processedTicks := range inboundChannel {
ticks = append(ticks, processedTicks...)
log.Println("Got processed ticks from inboundChannel: ", processedIndex)
processedIndex += 1
}
log.Println("End of function.")
getTicksForCassandraKey 的代码是:
func getTicksForCassandraKey(cassandraSession gocql.Session, cassandraAnalysisKey string, startTime time.Time) (ticks []bson.M, err error) {
log.Println("getTicksForCassandraKey: ", cassandraAnalysisKey)
cassandraQuery := "select * from analysisdata where analysis_key = '" + cassandraAnalysisKey + "' and time > ? ALLOW FILTERING;"
q := cassandraSession.Query(cassandraQuery, startTime)
iter := q.Iter()
var rawData string
var rawAnalysisKey string
var rawTime time.Time
for iter.Scan(&rawAnalysisKey, &rawTime, &rawData) {
processedAlgoTick, processingErr := processAlgoTick(rawAnalysisKey, rawTime, rawData)
if processingErr != nil {
err = processingErr
return
}
ticks = append(ticks, processedAlgoTick)
}
iterCloseErr := iter.Close()
q.Release()
log.Println("Closed iter for analysis key: ", cassandraAnalysisKey)
if iterCloseErr != nil {
log.Println("Cassandra Iterator.Close() Error:", iterCloseErr)
}
return
}
最佳答案
主代码中的 inboundChannel 是阻塞的。我将其放入一个 go 例程中并使用 sync.WaitGroup() 来解决它。
关于gocql 阻塞太多并发读取请求(golang,Cassandra),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44184365/
我有一个包含元组列的表,该列由一个 int64 和一个 uuid 配对组成: CREATE TABLE ks.mytable { fileid frozen >, hits
我在尝试为我的应用程序实现一些计数器时遇到了这种奇怪的行为。基本上,我做了一个这样的柜台: CREATE TABLE stats_dev.log_counters ( date text PRIM
这个问题在这里已经有了答案: How can I pass a slice as a variadic input? (3 个答案) 关闭 4 年前。 我需要用多个 ips 初始化 gocql,我想
使用 GOCQL(Golang、Cassandra),我最多发出 128 个请求,然后一切都挂起。我相信我正确发布查询的 getTicksForCassandraKey() 函数,但不确定。 GOCQ
我有一个这样设置的 docker compose 文件: version: "3" services: web: image: myApp container_name: web
我正在尝试查询测试键空间,例如: package main import "fmt" import _ "github.com/gocql/gocql" var ( gocql string
我正在开发一个带有聚类列的时间序列数据模型,即 CREATE TABLE events ( id text, time timestamp, type text, va
在我的 Cassandra 配置中,我启用了用户身份验证并通过 ssl 连接到 cqlsh。我在使用 gocql 实现相同时遇到了问题,以下是我的代码: cluster := gocql.NewClu
我在 Cassandra 中插入数据时遇到以下错误。我正在为 Cassandra 使用 gocql 客户端。 {"error":"gocql: too many query timeouts on t
如何接受Cassandra的时间戳并使用gocql转换成字符串?查询是什么? 最佳答案 gocql 可以将其读入 time.Time , 然后可以通过调用 String() 将其转换为字符串.例如:
尝试运行 go 文件(应该运行)时出现此错误 clusterCfg.ConnectTimeout undefined (type *gocql.ClusterConfig has no field o
从 gocql 运行查询时出现问题,但它从控制台运行正常。 DELETE FROM honda.car_v1 WHERE (i
我一直在阅读 http://godoc.org/github.com/gocql/gocql但是我不明白如何使用 gocql 进行 INSERT -- IF NOT EXIST。 它表示 func (
我在 Cassandra 中有一个 UDT,我有一个表,其架构中包含这些 UDT 的数组。这是一个示例: CREATE TYPE keyspace.test_type( x float,
我有以下 gocql 连接。 //cassandra connection cluster := gocql.NewCluster("localhost") cluster.Keyspace
如果您要使用 cqlsh 直接与 Cassandra 交互,您可以执行以下操作: $ cqlsh cqlsh:test> SOURCE '/home/me/reset_db.cql' 我已经多次尝试使
Query.Release() 在幕后做了什么?“将查询返回到池中”是什么意思?何时应使用 Query.Get() 以及何时使用 Query.GetRelease()? 最佳答案 正如您在文档中注意到
我有一个关于使用 blob 类型作为分区键的问题。我使用它,因为我需要保存哈希值。(哈希值返回二进制数据。通常为十六进制。) 我尝试使用 gocql 进行选择查询,但失败并出现以下错误。有什么方法可以
我一直在努力思考如何使用 Golang 中的驱动程序在 Apache Cassandra 中进行分页。 我有以下用于获取行的代码 /// Assume all other prerequisites.
我正在使用具有 9 个节点且复制因子为 3 的 scylla 集群。一个应用程序打开一个连接,读取和写入数据。 但是,我注意到在 scylla CQL 优化监控仪表板中,cross shard 的百分
我是一名优秀的程序员,十分优秀!