Как бы вы поддержали супер-столбцы в библиотеке libQtCassandra?
Я написал libQtCassandra и текущая версия не поддерживает супер-столбцы. Одной из причин отказа от этой поддержки было то, что она нарушает схему, используемую библиотекой, чтобы дать пользователям возможность использовать оператор массива ([]) для доступа и записи данных.
Если вы не знакомы, библиотека позволяет вам создать "контекст" (соединение с кластером Cassandra), и из этого контекста вы можете написать что-то вроде этого:
// set value 123 in "column name" of "row key" of "column family":
context["column family"]["row key"]["column name"] = 123;
// retrieve that value:
int value = context["column family"]["row key"]["column name"];
Так что... очень просто. Однако, если мы введем супер-столбцы, мы добавим еще один доступ к массиву, который зависит от того, существует ли супер-столбец или нет. Чтобы ты делал?
Вы бы использовали функцию для доступа к супер-столбцам?
context["column family"]["row key"].sc("super column")["column name"] = 123;
Или вы бы заставили супер колонку работать как другие параметры?
context["column family"]["row key"]["super column"]["column name"] = 123;
Очевидно, что система (семейство столбцов) знает, что к чему. Так что это легко реализовать в любом случае, только это делает библиотеку немного более сложной, чтобы поддерживать синтаксис массива для супер-столбцов.
У меня была другая идея - добавить объект, который можно было бы использовать при указании строки. Но это выглядит довольно некрасиво
context["column family"][sc("row key", "super column")]["column name"] = 123;
Это легче реализовать, но не выглядит слишком хорошо, когда вы смотрите на финальный код.
Какой подход к такой проблеме будет более подходящим?
1 ответ
Похоже, что введение поддержки суперколонок будет продолжать поощрять использование устаревшей функции. Использование альтернатив, таких как композиты, является лучшим подходом к решению проблем, подталкивающих людей к суперколонкам. Я не уверен, что эти усилия не станут движением в неправильном направлении. В то же время, если люди ДОЛЖНЫ получить доступ к суперколонкам из приложения C++, они могут сделать это с помощью Thrift.
Поэтому я предлагаю обсудить способ добавления композитной поддержки в libQtCassandra, поскольку в данный момент его там нет. Таким образом, мы призываем пользователей сделать более разумный выбор модели данных, предоставляя более легкий доступ к правильным конструкциям.