Как бы вы поддержали супер-столбцы в библиотеке 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, поскольку в данный момент его там нет. Таким образом, мы призываем пользователей сделать более разумный выбор модели данных, предоставляя более легкий доступ к правильным конструкциям.

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