2016-10-25 15 views
2

生産コードでテーブルの生成を維持するのは良い方法ですか?Cassandra autoは生産現場でテーブルコードを作成します

私はあまりにも言及しています:

Await.ready(database.autocreate().future(), 2 minutes) 

でこれを残し持つ任意の潜在的な問題がありますか?それが良いアイデアかどうかについてのちょっとした説明を探してください。

このタイプの作業を、最初のロールアウトおよび移行中に実行するスクリプトのような外部に保つ方が良いですか?

答えて

-1

テーブルの作成/変更ロジックは、インストールまたはアップグレード後に一度も有効でないことがあります。さらに、それは安全ではないかもしれない/生産コードにそれを保持する必要はありません。したがって、あなたのコード/スクリプトをブートストラップまたはインストーラレベルに保つ。

-1

すでに指摘したように、私の経験から、これはあなたが持ちたいと思うものではありません。 私はプロダクションで1年以上ファントムを使用していましたが、テーブル作成を自動的に何かにしていた唯一の場所は、テストの中に埋め込みバージョンで動作していました。

あなたがよりここに見つけることができますいくつかの時点では、使用して、あなたのテーブルのパラメータをカスタマイズすることが可能であるかどうかという事実はhttps://github.com/thiagoandrade6/cassandra-phantom/blob/master/src/test/scala/com/cassandra/phantom/modeling/test/service/SongsTest.scala

は、さらに生産でこれを使用しない理由の一つに議論をプッシュすることですPhantom-DSLはいくつかのテーブルのカスタマイズをサポートしていますが、あなたのコードで将来的に見たいものではないはずです。

2

私は、上記のすべてのアドバイスに完全に、非常に強く反対しています。ファントムの全体的なポイントは、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のアップグレード/ダウングレードでかなり不愉快になることがあります。物事?

+0

私はファントムを使用しないと言っているのではありませんが、この自動作成はjvmプロセスが実行されるたびに呼び出される永続化レイヤーの内部にあるべきですか? –

+0

@coolbreezeデフォルトでは、クエリは 'ifNotExists'を使うので、全てが冪等であり、設定を上書きしません。カッサンドラへのいくつかの呼びかけはあなたの全体的なパフォーマンスに本当に何もしません、あなたは本当にそれらが存在すると感じることさえありません。ファントム2.0.0はすぐに利用できるようになります。 – flavian

+0

私はもっと個人的な意見だと思います。私のチームは、コード内でテーブルのカスタマイズと初期化を使用しないことにしました。このアプローチでも何も問題はありません。 –

関連する問題