首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cassandra -高并发读写应用程序问题

cassandra -高并发读写应用程序问题
EN

Stack Overflow用户
提问于 2014-05-05 16:06:05
回答 1查看 819关注 0票数 1

我正在实现一个应用程序,它在4个线程中生成数十万行。每个线程打开一个到cassandra的单独连接。

表中的每一项都有一个惟一的散列标识符(字符串),但主键是一个uuid。

项目持久化的过程如下:

1)创建项并计算其哈希值。2)然后在第二个表中执行对散列的查找,该表根据项目的uuid对散列进行配对。3)如果找到hash - uuid对,则执行对项uuid的查找(再次执行第一个表),由于该项必须存在(因为找到了"hash - uuid“对),因此该项从cassandra加载到JPA并随后进行更新。当没有找到"hash - uuid“对时,会在相应的表中创建一个新项目,并保存一个新的"hash - uuid”对。

数据生成有两个步骤。第一步是使用空表运行并生成第一个数据集。没有错误发生,因为在步骤nr中。3,永远不会找到"hash - uuid“对,因此不会发生更新。

在第二步中,整个算法再次运行,但已经在填充的数据表上运行。在此步骤中,通过相应的uuid(主键)读取数据项时会发生随机错误-有时服务器不会返回完整的文本数据(适当的JSON字符串存储在表中,但不完整的JSON字符串被检索到应用程序中)。

我完全确定,我的算法是正确的,因为同样的算法适用于hibernate和mysql,甚至是postgresql (但由于我需要更快的写入速度,我正在尝试cassandra)。

我使用的是16 GB内存的macbook pro,使用cassandra时,我使用的是Kundera库(支持JPA)。至于cassandra,我试过DataStax2.0.4版本,也试过直接从Apache站点下载的2.0.7版本。没有集群,只有一个实例在我的机器上本地运行,在外部SSD驱动器上。昆德拉正在使用CQL v3。

有没有人知道这种行为是如何发生的?datastax cassandra驱动程序或Kundera中是否存在错误?或者我使用cassandra是错误的,数据库不应该以这种方式使用?或者有没有什么我可能忘记的配置调整?

我在cassandra配置文件中唯一更改的是所有超时,因为我使用默认值获得了太多的TimeoutExceptions (超时发生在主键查找期间)。

EN

回答 1

Stack Overflow用户

发布于 2014-05-07 22:51:49

我怀疑您的代码没有以threadsafe的方式使用Cassandra连接:必须注意一次只允许一个线程访问一个连接。我不知道Kundera是如何实现这一点的,因为JPA将为Cassandra生成非常低效的查询,我不推荐这样做。查看data modeling resources here并使用native CQL java driver

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23467724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档