私は、上記のすべてのアドバイスに完全に、非常に強く反対しています。ファントムの全体的なポイントは、CQLを書く必要がないことです。すべての可能なプロパティを含め、スキーマの初期化方法を制御できる完全なメカニズムがあります。
hereのテストを参照するか、デフォルトのカサンドラ初期設定では、実行できないことはほとんどありません。自動作成中
カスタム設定は
あなたはdatabase.autocreate
時にデフォルトするのではなく、それらすべてのparamsを提供したい場合は、それはあまりにも本当に簡単です:
class MyTable extends CassandraTable[MyTable, MyRecord] {
override def autocreate(
keySpace: KeySpace
): CreateQuery.Default[T, R] = create.ifNotExists()(keySpace)
.`with`(compaction eqs LeveledCompactionStrategy.sstable_size_in_mb(50))
.and(compression eqs LZ4Compressor.crc_check_chance(0.5))
}
を後で、これを行うとき:
class MyDB(override val connector: KeySpaceDef) extends Database {
object myTable extends MyTable with connector.Connector
}
を
あなたは:
val database = new MyDB(ContactPoint.local.keySpace("whatever")
database.createAsync
またはdatabase.create
を実行すると、上記で定義したすべての設定が尊重されます。
カスタムキースペースの自動作成
ファントムはまた、鍵空間の自動生成時にカスタムキースペースの初期化クエリを指定してサポートしています。
val init = KeySpaceSerializer("my_app").ifNotExists()
.`with`(replication eqs SimpleStrategy.replication_factor(2))
.and(durable_writes eqs true)
val connector = ContactPoint.local.keySpace(
"my_app",
(session, space): (Session, KeySpace) => init.queryString
)
このようにして、CQLを処理する必要がないと考えられるカスタマイズの任意の形式から利益を得ることができます。まもなくサブスクリプションに利用できるphantom-pro
を使用すると、自動化されたスキーマ移行機能もあるので、あらゆる種類のCQLでスキーマを保持することは非常に重要ではありません。
ファントムはバージョン間でCQLのバリエーションも透過的に処理しますが、私はこれを行うbashスクリプトを見たことがないので、単純なCassandraのアップグレード/ダウングレードでかなり不愉快になることがあります。物事?
私はファントムを使用しないと言っているのではありませんが、この自動作成はjvmプロセスが実行されるたびに呼び出される永続化レイヤーの内部にあるべきですか? –
@coolbreezeデフォルトでは、クエリは 'ifNotExists'を使うので、全てが冪等であり、設定を上書きしません。カッサンドラへのいくつかの呼びかけはあなたの全体的なパフォーマンスに本当に何もしません、あなたは本当にそれらが存在すると感じることさえありません。ファントム2.0.0はすぐに利用できるようになります。 – flavian
私はもっと個人的な意見だと思います。私のチームは、コード内でテーブルのカスタマイズと初期化を使用しないことにしました。このアプローチでも何も問題はありません。 –