【问题标题】:Setting default consistency level设置默认一致性级别
【发布时间】:2017-06-03 16:37:39
【问题描述】:

这是设置默认(读写)一致性级别 val connector: KeySpaceDef = ContactPoints(hosts, port).withClusterBuilder { builder => builder.withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.QUORUM)) }.keySpace("test")的正确方法吗

【问题讨论】:

    标签: scala cassandra phantom-dsl


    【解决方案1】:

    不,一致性级别设置为每个查询的协议级别,而设置默认值可能非常危险。如果您不希望设置只是让默认值发生,则不必在任何地方显式。

    否则,在重要的地方使用一致性级别:

    class Table extends .. {
    
        def store(rec: Record): Future[ResultSet] = {
          insert.value(_.id, rec.id).consistencyLevel_=(ConsistencyLevel.QUORUM)
        }
    
    }
    

    一致性级别与复制因素、性能、可用​​性和许多其他因素有关,因此在现实生活中,您最终可能会花费大量时间来寻找完美的答案。

    全局默认在技术上并不是一个真正可行的想法,因此没有真正的动机在驱动程序中使用这种机制。

    【讨论】:

    • 同意一般来说全局一致性设置不是一个好主意,但在我们的例子中,我们希望确保我们可以读取自己的写入。除此之外,我上面的代码可以吗?它会设置默认的一致性级别吗?如果没有,它有什么作用?
    • 我同意@EugeneMi - 为所有查询设置默认一致性级别很有用,例如QUORUM - 在每个查询中手动设置此一致性级别会增加大量样板文件,并且如果由于忘记添加设置而使用 ConsistencyLevel.ONE 意外执行查询,则会引入细微错误的机会。 EugeneMi 的上述代码是否正常工作? “如果你不想要一个设置,就让默认值发生,你不必在任何地方都明确。” - ConsistencyLevel.ONE 在我们的例子中绝对不是一个好的默认值(假设这是默认值)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多