为了在C * 2.2中使用TWCS,我从https://github.com/jeffjirsa/twcs代码行构建了jar并将其添加到我的lib目录中。 Cqlsh适用于TWCS,但看起来python驱动程序不能识别新的类和配置选项。我将cassandra-env.sh
中的CLASSPATH设置为lib目录。
import ssl
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
ap = PlainTextAuthProvider(username='cassandra', password='cassandra')
ip = '127.0.0.1'
ca_path = '/a/ca.pem'
cluster = Cluster(contact_points=[ip], port=9042, protocol_version=2, auth_provider=ap, ssl_options={'ca_certs': ca_path, 'cert_reqs': ssl.CERT_REQUIRED})
session = cluster.connect()
create_statement = "CREATE TABLE IF NOT EXISTS test.agg_errors(time timestamp, timeid uuid, datacenter text,app_name text, error_message text, PRIMARY KEY(time,timeid)) WITH CLUSTERING ORDER BY (timeid DESC) AND default_time_to_live = 86400 AND compaction = { 'class':'com.jeffjirsa.cassandra.db.compaction.TimeWindowCompactionStrategy','compaction_window_unit': 'HOURS','compaction_window_size': '1' , 'unchecked_tombstone_compaction':'true'} AND gc_grace_seconds = '43200'"
session.execute(create_statement)
我收到错误:
ConfigurationException: Failed to validate compaction options: {compaction_window_unit=HOURS, compaction_window_size=2}
另外,在进一步调试时,我注意到这种行为并不一致。上面的脚本在十次运行中运行良好,执行的其余部分抛出错误。
我可以将STCS的子属性添加到TWCS,以调整窗口内的STCS行为吗?
我的窗口大小比ttl小得多,让我们说窗口1小时和1天,在这种情况下是从磁盘中删除1天后过期的SStables?检查过期的SStables的间隔是多少?
我在一篇关于控制上述行为的exprired_sstable_check_frequency_seconds
的博文中读到过?这可以用来控制支票的频率吗?
根据哪些建议我可以选择相对于表格的ttl的最佳compaction_window_size?
注意:我的Cassandr版本2.2.4。补丁中的版本是2.2.5,我希望这不应该是一个问题。