我对Spring Boot + cassandra Web应用程序有疑问。它开始随着数据的增长而出现,现在已成为超常见的情况。
有时所有查询都不起作用,CassandraRepository
返回null
。几秒钟后,它再次起作用,接下来几秒钟,它不再起作用。因此,Web应用程序会不断返回200
或404
响应。同一查询始终在cqlsh
中起作用。
我正在使用:
数据结构:
CREATE KEYSPACE data WITH replication = {'class': 'NetworkTopologyStrategy', 'dc1': '2'} AND durable_writes = true;
CREATE TABLE data.image (
hash text PRIMARY KEY,
image blob
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';
我要配置Cassandra连接,
@Configuration
@EnableCassandraRepositories(basePackages = "...path...")
public class CassandraConfig extends AbstractCassandraConfiguration {
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean();
cluster.setContactPoints("127.0.0.1");
cluster.setPort(91234);
return cluster;
}
要检索数据,我将CassandraRepository
与@Query(("select * from image where id = ?0"))
QueryAnnotation一起使用。检索到的数据包含图像斑点。
我认为这里的读取超时是一个问题,服务器的HDD磁盘速度较慢,而CPU却没有那么强大。但是如何用Spring Boot Starter覆盖此设置?
我尝试使用
SocketOptions so = new SocketOptions();
so.setConnectTimeoutMillis(10000);
so.setReadTimeoutMillis(20000);
cluster.setSocketOptions(so);
没有成功。
要想获得稳定的工作解决方案,我还能做些什么?
答案 0 :(得分:0)
nodetool repair
提供了帮助->几天后,一切开始按预期工作。结论:写数据库太多了。