Я предполагаю, что у вас будет большая нагрузка и много данных, поступающих через вашу систему, и снова я буду предполагать, что вы пробовали реляционную базу данных и разбили под тяжелой нагрузкой, попали в миллионы строк, 10 000+ запросов в секунду и т.д.
После этих предположений я бы сказал вам, что вам нужно изменить способ мышления. Например, в своем вопросе вы записали структуру таблицы, которая действительно важна, когда вы думаете о реляционных базах данных. Но в хранилищах столбцов (таких как cassandra / hbase / etc) это не так важно, это типы запросов, которые имеют значение. Поскольку в хранилищах столбцов вы всегда можете добавить новые метаданные (дополнительный столбец, который вы не будете использовать в своих запросах, но в ответах) в новый столбец, вам не нужно изменять свой дизайн. Но в реляционных базах данных вам нужно изменить таблицу или даже получить другую таблицу с отношением pk-fk.
При использовании cassandra (или любой другой базы данных столбцов) у вас должны быть все api перед вами.
Пример:
если у вас есть getAllUserPosts($userId)
в вашем API, вы должны иметь: UserPosts ColumnFamily или вторичный индекс для Posts ColumnFamily (который делает аналогичные вещи в фоновом режиме). Дальше как тебе нужен результат отсортированный? Да, это ключевой момент в дизайне, а если вы хотите, чтобы он сортировался по дате создания, то вам лучше использовать TimeUID в ключе или сторонний механизм для создания увеличивающихся uid для вас. Может быть, вы захотите отсортировать их по «последнему обновлению», тогда вам лучше поместить в них вторичный индекс.
Исходя из моего опыта, я бы сказал вам, что действительно здорово разрабатывать что-то с помощью cassandra, когда ваши API или то, что вам нужно из данных, предельно ясны, но когда вы захотите изменить большую функцию, у вас будут действительно большие задачи ты, будь осторожен. Также убедитесь, что вы понимаете основополагающую «в конечном итоге последовательность», которая делает Кассандру быстрой. Так как вам приходилось много раз биться головой о клавиатуру, чтобы заставить работать транзакцию (по крайней мере, я так и сделал). И, конечно, в какой-то момент вы захотите выполнить массовую операцию над огромными данными, имеющимися у вас на Кассандре: будьте готовы к использованию облачных вычислений. Hadoop.
PS: Я полагаю, что здесь есть много людей с большим опытом и знаниями, связанными с Кассандрой, которые помогли бы вам спроектировать вашу систему намного лучше, чем я. Я просто хотел поделиться тем, что я испытал и понял, когда использовал кассандру в производстве.