Запрос SetColumn
Как я могу искать НЕ СОДЕРЖИТ в наборе? Скажем, у меня есть следующая модель:
case class ClassRoom(id:String, age:Int, name:String , kids: Set[String])
abstract class PersonModel extends CassandraTable[PersonModel, Person] {
override def tableName = "ClassRooms"
object id extends StringColumn(this) with PartitionKey[String]
object age extends DoubleColumn(this) with PrimaryKey[Double]
object kids extends SetColumn[String](this)
Я хочу сделать следующий запрос
def findMissing(minAge:Double, kid:String) = select
.where(_.age > age)
.and (_.kids not contain kid)
.fetch()
1 ответ
К сожалению, потому что в Cassandra движок основан на индексации "стиля карты", NOT
Оператор не является подходящей концепцией. Можно предположить, что он может быть раскрыт через такие вещи, как кеш ключей для попаданий ключа раздела, но для таких вещей, как вторичные индексы, они могут не быть технической реальностью.
Прежде всего, вам понадобится object kids extends SetColumn[String](this) with Index[Set[String]]
для нормального contains
работать, отсюда мое упоминание о вторичном индексе.
Чтобы достичь того, что вы хотите, исходя из кардинальности, у вас есть два пути: либо использовать вторичные индексы, либо обычный CONTAIN
или вы отменяете нормализацию и сохраняете ее в отдельной таблице, что может улучшить производительность, но все равно потребует "различий".