Запрос 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 или вы отменяете нормализацию и сохраняете ее в отдельной таблице, что может улучшить производительность, но все равно потребует "различий".

Другие вопросы по тегам