次のエラーが表示されます。
22:24:34.419 [run-main-0] DEBUG com.websudos.phantom - Executing query: com.datastax.driver.core.BatchStatement@3f4f5b68
22:24:34.426 [pool-15-thread-3] ERROR com.websudos.phantom - Batch too large
[error] (run-main-0) com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large
com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large
コードを再実行すると、毎回次の時点でこのエラーが発生します。
cqlsh> select count(*) from superchain.blocks limit 1000000;
count
-------
51728
(1 rows)
Warnings :
Aggregation query used without partition key
洞察を事前に感謝します。
+++ アップデート +++
したがって、問題のコードは
//This file is Database.scala
class Database(val keyspace: KeySpaceDef) extends DatabaseImpl(keyspace) {
def insertBlock(block: Block) = {
//should note here that have also tried Batch.unlogged to same effect
Batch.logged
.add(ChainDatabase.block.insertNewRecord(block))
.future()
}
def insertTransaction(tx: Transaction) = {
//should note here that have also tried Batch.unlogged to same effect
Batch.logged
.add(ChainDatabase.tx.insertNewTransaction(tx))
.future()
}
object block extends BlockTable with keyspace.Connector
object tx extends TransactionTable with keyspace.Connector
}
object ChainDatabase extends Database(Config.keySpaceDefinition)
以下はトランザクションの挿入関数を示しており、ブロックにも同様のコードがあります。
フォローしようとした
&&
https://github.com/outworkers/phantom/wiki/Batch-statements
Batch too large
しかし、エラーにつながらない実装を見つけるのにまだ苦労しています。
//This file is Transaction.scala
abstract class TransactionTable extends TransactionColumnFamily with RootConnector {
override val tableName = "transactions"
def insertNew(tx: Transaction): Future[ResultSet] = insertNewTransaction(tx).future()
def insertNewTransaction(tx: Transaction) = {
insert
.value(_.txid, tx.txid)
.value(_.version, tx.version)
.value(_.locktime, tx.locktime)
.value(_.vout, tx.vout)
.value(_.vin, tx.vin)
}
}