Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java cassandra-高并发读写应用程序问题_Java_Jpa_Cassandra_Cassandra 2.0_Kundera - Fatal编程技术网

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

Java cassandra-高并发读写应用程序问题,java,jpa,cassandra,cassandra-2.0,kundera,Java,Jpa,Cassandra,Cassandra 2.0,Kundera,我正在实现一个应用程序,它在4个线程中生成数十万行。每个线程打开一个到cassandra的单独连接 表的每个项都有一个唯一的哈希标识符(字符串),但主键是一个uuid 项目持久化的过程如下所示: 1) 将创建该项并计算其哈希。 2) 然后在第二个表中执行哈希的查找,该表将哈希与项目的UUID相应地配对。 3) 如果找到一个hash-uuid对,将执行对项目uuid的查找(再次是第1个表),并且由于该项目必须存在(因为找到了“hash-uuid”对),因此该项目将从cassandra加载到JPA,

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

表的每个项都有一个唯一的哈希标识符(字符串),但主键是一个uuid

项目持久化的过程如下所示:

1) 将创建该项并计算其哈希。 2) 然后在第二个表中执行哈希的查找,该表将哈希与项目的UUID相应地配对。 3) 如果找到一个hash-uuid对,将执行对项目uuid的查找(再次是第1个表),并且由于该项目必须存在(因为找到了“hash-uuid”对),因此该项目将从cassandra加载到JPA,并随后进行更新。当未找到“hash-uuid”对时,将在相应的表中创建一个新项,并保存一个新的“hash-uuid”对

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

在第二步中,整个算法再次运行,但已在填充的数据表上运行。在此步骤中,通过相应的UUID(主键)读取数据项时会出现随机错误-有时服务器不会重新运行完整的文本数据(表中存储了正确的JSON字符串,但会将不完整的JSON字符串检索到应用程序中)

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

我使用的是一台16 GB内存的macbook pro,与cassandra一起使用的是Kundera库(支持JPA)。至于cassandra,我尝试了datastax 2.0.4版本,以及直接从Apache站点下载的2.0.7版本。没有群集,只有一个实例在我的计算机上本地运行,位于外部SSD驱动器上。昆德拉正在使用CQL v3

有人知道这种行为是怎么发生的吗?Datasax cassandra驱动程序或Kundera中是否存在错误?还是我用卡桑德拉错了,数据库不应该这样使用?或者有没有我可能忘记的配置调整


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

我怀疑您的代码没有以线程安全的方式使用Cassandra连接:必须注意一次只允许一个线程访问一个连接。我不知道昆德拉是如何做到这一点的,因为JPA将为Cassandra生成效率极低的查询,我不推荐这样做。请参阅,然后使用。

谢谢您的回答,这正是我所怀疑的。查询生成没有问题,因为即使使用JPA,查询也只是基本的主键查找。我怀疑问题出在昆德拉,我只是想确定,我没有做卡桑德拉不应该用我的方式处理的任何数据操作。如果有人感兴趣,下面是关于问题的更详细描述: