Статьи

Переход с MySQL на Кассандру: история успеха

Сегодня я поделюсь с вами своим опытом, когда я начинал с Apache Cassandra … Один из самых сложных шагов для изучения любого материала NoSql — это забрать из головы принципы нормализации и эти структуры реляционных БД. Реляционные базы данных предназначены для сохранения нормализованных данных без дублирования данных. Ну, одно из главных изменений здесь — это то, что вам нужно думать или разрабатывать для ваших запросов то, что хотят ваши отчеты или методы поиска, и создавать постоянную структуру по мере необходимости.

Центы веб-страниц, книг, статей рассказывают о том, что такое Cassandra, что такое Hazelcast, что такое Hadoop, MemcacheDB, MongoDB и т. Д. Но ни один из них не касается того, КАК перенести мои данные из реляционной БД в одну из них.

Мы хотели перенести постоянные данные двух наших модулей, Turmeric SOA Monitoring.и данные ограничения скорости куркумы SOA . В куркуме мы используем MySql в качестве реляционной базы данных. После недели чтения и анализа нескольких вариантов NoSql мы выбрали Cassandra. <- Я надеюсь написать еще один пост о причинах …. Кстати, я очень рекомендую это чтение: Кассандра: полное руководство

От реляционных таблиц до ключей

Большое дело сейчас, Как перенести их. Что ж, это то, что мы сделали:
следуя наилучшей практике Agile, если что-то сложное или сложное, просто разбейте его на небольшие задачи. В конце концов, у нас все еще был хороший разрыв для MMF («Минимальная рыночная особенность», см. Программное обеспечение по номерам . Итак:

Шаг 1: Переместите наши реляционные таблицы БД в Семейство Cassandra Colum
Шаг 2: Настройте наши новые Семейства столбцов, чтобы все необходимые данные без одинаковых операторов JOIN
Шаг 3. Разобрать эти семейства столбцов в соответствии с требованиями метода поиска и запроса. Обычно для поиска или метода запроса следует использовать 1 семейство столбцов
Шаг 4:Настройте методы Создателей и Обновлений в соответствии с предыдущими изменениями. Не пугайтесь, если вы сохраняете дублированные данные. Имейте в виду: «думайте о своих запросах! Забудьте правила нормализации».
Шаг 5: пока (! Доволен) -> выполнить шаги 3 и 4

Кассандра ДАО

Теперь самый трудный шаг — это # ​​1. Не паникуйте, мы разработали некий универсальный (на самом деле он использует Java Generics) Cassandra DAO для вашей миграции. Поскольку вся эта работа была необходима для проекта, над которым я на самом деле работаю, вы найдете его как подмодуль TurmericSOA, но, следуя лицензии Apache, вы можете использовать ее через файл зависимостей Maven.

<dependency>
<groupId>org.ebayopensource.turmeric.utils</groupId>
<artifactId>turmeric-utils-cassandra</artifactId>
<version>1.2.0.0-SNAPSHOT</version>
<type>jar</type>
</dependency>


Характеристики

  • 100% Java-код
  • Он может запустить встроенную службу Cassandra или просто поговорить с вашей внешней службой Cassandra
  • Использует библиотеку Hector в качестве клиента Java Cassandra
  • Динамически [Супер] Создание семейства столбцов
  • Ключевые типы и типы данных, определенные во время выполнения с использованием обобщенных
  • Поддерживаемые основные методы CRUD:

 

boolean containsKey(KeyType key);

void delete(KeyType key);

T find(KeyType key);

Map> findItems(final List keys, final Long rangeFrom, final Long rangeTo);

Set findItems(final List keys, final String rangeFrom, final String rangeTo);

Set getKeys();

void save(KeyType key, T model);

 

Основные классы
Этот пакет утилит содержит следующий пакет и классы:

org.ebayopensource.turmeric.utils.cassandra.service

  • CassandraManager: инициализировать статический экземпляр EmbeddedCassandraService на основе файла конфигурации yaml

org.ebayopensource.turmeric.utils.cassandra.hector

  • HectorManager: Управляет созданием и чтением пространства ключей и семейства столбцов. Он использует Гектор Api
  • HectorHelper: Включает некоторые служебные методы, основанные на Java Reflection и Java Generics. IE: извлечение имен полей из POJO, которые используются в качестве имен столбцов в пространствах клавиш Кассандры

org.ebayopensource.turmeric.utils.cassandra.dao

  • AbstractColumnFamilyDao: как это называется, это должен быть базовый класс, который должен расширять каждый дао. Он определяет и реализует основные операции DAO с использованием Hector Api.

Конфигурационные файлы

Вот структура каталогов файлов конфигурации:

META-INF/
         security/
                  config/
                         cassandra/
                                   cassandra.properties

Пример этого файла свойств:

cassandra-cluster-name=TurmericCluster
cassandra-host-ip=127.0.0.1
cassandra-rpc-port=9160
cassandra-my-keyspace=My-keyspace

#column families
cassandra-foo-column-family=foo
cassandra-bar-column-family=bar


Как это использовать….

Это очень интуитивно понятно. Предположим, у нас есть таблица Foo в нашей реляционной БД, т.е. MySql.
Так:

Создать интерфейс BaseDao

public interface BaseDao {
		  public void delete(String key);
		  public Set getKeys();
		  public boolean  containsKey(String key);
		  public void save(String key, FooPojoClass  fooPojo);
		  public FooPojoClass find(String key);
}

Создайте интерфейс FooDao

public interface FooDao extends BaseDao  {
}

 

Создайте реализацию FooDao

public class FooDaoImpl extends AbstractColumnFamilyDao
		implements FooDao {
	public FooDaoImpl(final String clusterName, final String host, final String keySpace, final String cf,  final Class kTypeClass) {
		super(clusterName, host, keySpace, kTypeClass, FooPojo.class, cf);
	}

}

… в вашем коде

//initiates an embedded Cassandra Service
CassandraManager.initialize();

//creates our Foo Column Family
FooDao fooDao = new FooDaoImpl("myCluster", "127.0.0.1", "myKeyspace",
				"myColumnFamilyName", String.class);

и вуаля, ваша реляционная таблица перенесена как семейство столбцов Кассандры !!!

В любом случае, вы можете заняться серфингом в классах UT, чтобы посмотреть, как они реализованы …

наслаждайтесь !!!


Источник: http://itsecrets.wordpress.com/2012/01/12/jumping-from-mysql-to-cassandra-a-success-story/