我有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。检索到的数据包含图像blob。
我认为读取超时是一个问题,服务器具有较慢的HDD磁盘而不是那么强大的CPU。但是如何使用spring boot starter覆盖此设置?
我试过用
SocketOptions so = new SocketOptions();
so.setConnectTimeoutMillis(10000);
so.setReadTimeoutMillis(20000);
cluster.setSocketOptions(so);
没有成功。
我还能做些什么来获得稳定的工作解决方案?
nodetool repair
帮助 - >几天后一切都按预期开始工作。结论:写数据库太多了。