Вступление
Во время моего последнего взаимодействия с сообществом Couchbase у меня возник вопрос, как мне легко импортировать мои данные из моей текущей базы данных в Couchbase. И мой ответ всегда был один и тот же:
- Возьмите ETL, такой как Talend, чтобы сделать это
- Просто напишите небольшую программу для копирования данных из вашей RDBMS в Couchbase …
Итак, я написал эту небольшую программу, которая позволяет вам импортировать содержимое СУБД в Couchbase. Эти инструменты можно использовать как есть, или вы можете посмотреть на код, чтобы адаптировать его к вашему приложению.
Инструмент: Couchbase SQL Importer
Доступный здесь Couchbase SQL Importer позволяет вам с помощью простой командной строки скопировать всю или часть вашей схемы SQL в Couchbase. Прежде чем объяснить, как запустить эту команду, давайте посмотрим, как данные сохраняются в Couchbase при их импорте:
- Каждая строка таблицы импортируется в один документ JSON
- где каждый столбец таблицы становится атрибутом JSON
- Каждый документ в качестве ключа состоит из имени таблицы и счетчика (приращение)
Следующий конкретный пример, основанный на образце базы данных MySQL World , поможет вам понять, как он работает. Эта база данных содержит 3 таблицы: City, Country, CountryLanguage. Стол City выглядит так:
1
2
3
4
5
6
7
8
9
|
+-------------+----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------+------+-----+---------+----------------+ | ID | int ( 11 ) | NO | PRI | NULL | auto_increment | | Name | char ( 35 ) | NO | | | | | CountryCode | char ( 3 ) | NO | | | | | District | char ( 20 ) | NO | | | | | Population | int ( 11 ) | NO | | 0 | | +-------------+----------+------+-----+---------+----------------+ |
Документ JSON, соответствующий этой таблице, выглядит следующим образом:
1
2
3
4
5
6
7
8
|
city: 3805 { "Name" : "San Francisco" , "District" : "California" , "ID" : 3805 , "Population" : 776733 , "CountryCode" : "USA" } |
Вы видите, что здесь я просто беру все строки и «перемещаю» их в Couchbase. Это хороший первый шаг, чтобы поиграть со своим набором данных в Couchbase, но, вероятно, это не последняя модель, которую вы хотите использовать для своего приложения; Большую часть времени вам придется видеть, когда использовать встроенные документы, список значений и т. д. в ваших документах JSON.
В дополнение к документу JSON инструмент создает представления на основе следующей логики:
- представление, в котором перечислены все импортированные документы с именем «таблицы» (он же тип) в качестве ключа
- представление для каждой таблицы со столбцами первичного ключа
Вид: все / по типу
1
2
3
4
5
6
7
|
{ "rows" : [ { "key" : "city" , "value" : 4079 }, { "key" : "country" , "value" : 239 }, { "key" : "countrylanguage" , "value" : 984 } ] } |
Как вы можете видеть, это представление позволяет получить с помощью одного запроса Couchbase номер документа по типу.
Также для каждого типа таблицы / документа создается представление, в котором ключ индекса создается из первичного ключа таблицы. Давайте, например, запросить документы «Город».
Вид: город / by_pk? Уменьшить = ложь & лимит = 5
01
02
03
04
05
06
07
08
09
10
|
{ "total_rows" : 4079 , "rows" : [ { "id" : "city:1" , "key" : 1 , "value" : null }, { "id" : "city:2" , "key" : 2 , "value" : null }, { "id" : "city:3" , "key" : 3 , "value" : null }, { "id" : "city:4" , "key" : 4 , "value" : null }, { "id" : "city:5" , "key" : 5 , "value" : null } ] } |
Ключ индекса соответствует значению столбца City.ID. Когда первичный ключ состоит из нескольких столбцов, ключ выглядит следующим образом:
Представление: CountryLanguage / by_pk? Reduce = false & limit = 5
01
02
03
04
05
06
07
08
09
10
|
{ "total_rows" : 984 , "rows" : [ { "id" : "countrylanguage:1" , "key" : [ "ABW" , "Dutch" ], "value" : null }, { "id" : "countrylanguage:2" , "key" : [ "ABW" , "English" ], "value" : null }, { "id" : "countrylanguage:3" , "key" : [ "ABW" , "Papiamento" ], "value" : null }, { "id" : "countrylanguage:4" , "key" : [ "ABW" , "Spanish" ], "value" : null }, { "id" : "countrylanguage:5" , "key" : [ "AFG" , "Balochi" ], "value" : null } ] } |
Это представление построено из первичного ключа таблицы CountryLanguage из столбцов CountryLanguage.CountryCode и CountryLanguage.Language.
1
2
3
4
5
6
7
8
|
+-------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+---------------+------+-----+---------+-------+ | CountryCode | char ( 3 ) | NO | PRI | | | | Language | char ( 30 ) | NO | PRI | | | | IsOfficial | enum ( 'T' , 'F' ) | NO | | F | | | Percentage | float ( 4 , 1 ) | NO | | 0.0 | | +-------------+---------------+------+-----+---------+-------+ |
Как использовать инструмент Couchbase SQL Importer?
Importer — это простая утилита командной строки на основе Java, довольно простая в использовании:
- Загрузите файл CouchbaseSqlImporter.jar здесь. Этот файл содержит все зависимости для работы с Couchbase: клиент Java Couchbase и GSON.
- Загрузите драйвер JDBC для базы данных, которую вы используете в качестве источника данных. Для этого примера я использую MySQL, и у меня есть драйвер для сайта MySQL.
- Сконфигурируйте импорт, используя подходящий файл связей.
010203040506070809101112131415
## SQL Information ##
sql.connection=jdbc:mysql:
//192.168.99.19:3306/world
sql.username=root
sql.password=password
## Couchbase Information ##
cb.uris=http:
//localhost:8091/pools
cb.bucket=
default
cb.password=
## Import information
import
.tables=ALL
import
.createViews=
true
import
.typefield=type
import
.fieldcase=lower
Этот пример файла свойств содержит три раздела:
- Два первых раздела используются для настройки соединений с базой данных SQL и кластером Couchbase (обратите внимание, что сначала нужно создать корзину)
- Третий раздел позволяет настроить сам импорт
- import.tables: ALL, чтобы импортировать все таблицы, или список таблиц, которые вы хотите импортировать, например, City, Country
- import.createViews: true или false, чтобы форсировать создание представлений.
- import.typefield: используется для добавления нового атрибута во все документы, содержащие «тип».
- import.fieldcase: null, lower, upper: это приведет к регистру имени атрибута и значения типа (например, City или city или CITY).
- Запустите инструмент!
1
java -cp
"./CouchbaseSqlImporter.jar:./mysql-connector-java-5.1.25-bin.jar"
com.couchbase.util.SqlImporter
import
.properties
Таким образом, вы запускаете команду Java с правильным classpath (параметр -cp).
И все готово, вы можете получить свои данные из базы данных SQL в Couchbase. Если вам интересно посмотреть, как это работает внутри, вы можете взглянуть на следующий абзац.
Кодекс: как это работает?
Основной класс инструмента действительно простой com.couchbase.util.SqlImporter , процесс:
- Подключиться к базе данных SQL
- Подключиться к Couchbase
- Получить список столов
- Для каждой таблицы выполните команду «выбрать * из таблицы»
- Проанализируйте ResultSetMetadata, чтобы получить список столбцов
- Создайте карту Java для каждой строки, где ключ — это имя столбца, а значение — это значение.
- Сериализуйте эту карту в документ GSON и сохраните ее в Couchbase
Код доступен в Java-методе ImportTable (таблица строк) .
Интересным моментом является то, что вы можете использовать и расширять код для работы с вашим приложением.
Вывод
Я быстро создал этот инструмент, чтобы помочь некоторым людям в сообществе, если вы используете его и нуждаетесь в новых функциях, сообщите мне об этом, используя комментарий или запрос на извлечение.