[Из песочницы] Tibero. Первый блин
Недавно в моей жизни закончился период поиска новой работы. На одном из собеседований этого периода я узнал, что в мире появилась новая СУБД, разработчики которой обещают вот-вот затмить собой Oracle всемогущий. Заманчивое обещание тут же породило у меня желание попробовать это чудо заморской техники. Речь шла о корейской СУБД Tibero.
По данным википедии:
Tibero — так называется СУБД производимая и распространяемая Tibero Corporation, являющаяся частью Южно-Корейской корпорации TmaxSoft. Разработка этого продукта начата в 2003 году, а в 2008 году они стали второй компанией в мире предоставляющей кластер основанный на дисках, как на разделяемом ресурсе (shared-disk-based cluster).
…
CУБД Tibero считается альтернативой Oracle в связи с их полной совместимостью с продуктами Oracle, включая SQL.
Tibero гарантирует надежность транзакций базы данных (которые являются продуманным набором SQL выражений) обеспечиваемой поддержкой ACID (атомарность, согласованность, изолированность, долговечность).
…
Tibero реализовало уникальную архитектуру потоков (Tibero Thread Architecture) для решения недостатков предыдущих СУБД. В результате Tibero может эффективно использовать системные ресурсы, такие как CPU и память, используя меньшее количество серверных процессов. Это позволяет Tibero предлагать сочетание производительности, стабильности и масштабируемости, и облегчение процесса разработки и настройки. Дополнительно, СУБД позволяет пользователям и разработчикам используя множество стандартных интерфейсов легко интегрироваться с другими СУБД и приложениями.В дополнение, для улучшения 'Tibero Active Cluster' (система кластеризации БД похожая на Oracle RAC) была применена технология передачи информации блоками. Tibero поддерживает самонастраивающуюся оптимизацию производительности, надежную систему мониторинга базы данных и систему управления производительностью.
В Корее, Tibero была внедрена более чем 450 компаниям с различными направлениями деятельности: финансы, производство и связи с общественностью; и более чем с 14 компаниями в остальном мире по данным на Июль 2011.
По ощущениям, этот текст был написан сотрудниками самой Tibero, но это мы оставим на их совести.
Если еще покопаться в интернете, то можно обнаружить, что чуть более года назад компания открыла свое представительство в России, а кроме того «В настоящее время в России в реализации находятся около 50 проектов в самых различных областях. Для ряда заказчиков (например, Федерального центра информатизации Счетной палаты РФ) одной из причин поиска альтернативных решений на азиатском направлении (где компания TmaxSoft является лидером) стали введенные санкции со стороны США, касающиеся IT отрасли, которые TmaxSoft не поддерживает. Среди заказчиков Tibero в России: МТС, Министерство обороны РФ, МосЭнергоСбыт, Счетная палата РФ, Банк России, Федеральная служба по тарифам и др.»
В совокупности это ещё больше подогрело мой интерес к этому продукту. И я решил его попробовать: запустить и поиграться с ней. Для этого я в облаке Google арендовал маленький сервер с Debian 7.9 (wheeze) на борту. Вот его параметры:
Machine type: n1-standard-1 (1 vCPU, 3.75 GB memory)
CPU platform: Intel Ivy Bridge
Boot disk and local disks: 40GB Standard persistent disk
Первое с чем ты сталкиваешь — это критически маленькое количество информации на русском, да и на английском тоже её не густо. Второе — это то, что Tibero не предоставляет для нужд обучения и разработки бесплатную версию СУБД как это делает Oracle. Tibero же предоставляет тестовую лицензию на предыдущую версию СУБД сроком на пол года, и найти её мне было не просто. Для этого нужно было найти вот этот официальный, но запрятанный в недры интернета сайт: http://technet.tmaxsoft.com/. зарегистрироваться, скачать дистрибутив последней версии, обнаружить, что на него нет бесплатных лицензий, удалить дистрибутив, скачать дистрибутив старой версии и инструкцию по установке.
И так, скачиваем инструкцию и понимаем, что нам нужно JDK не ниже 1.5, gcc >= 3.4.6, xml файл лицензии на сервере, 512 MB RAM, Swap File 1 GB, 300mb в /tmp, 300MB на жестком диске при полной установке и 200 MB если ставите только клиент (но среди текста инструкции говорится, что без 1,5 GB база не поставится). Требования по Software я выполнил не все по очевидным причинам, а они такие: RedHat Enterprise Linux AS/ES 2.1, 3.0, 4.0. В примечании еще говорится о требовании к версии ядра: она должна быть не меньше 2.6.
Самым странным для меня стало требование поменять параметры ядра для установки! Ладно, если я крупная корпорация и у меня много денег и серверов. А если я маленькая компания и я экономлю на всем, чем могу? Покупаю дешевый корейский Oracle, у меня сервер-то всего один. Там много чего крутится и как-то не очень здорово безальтернативно заставлять меня менять настройки ядра.
Ладно, поправил файл /etc/sysctl.conf на следующее:
kernel.sem = 10000 32000 10000 10000
kernel.shmall = 2097152
kernel.shmmni = 4096
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 1024 65000
Требования Tibero такие:
semmsl 10,000 /proc/sys/kernel/sem
semmns 32,000
semopm 10,000
semmni 10,000
shmall 2,097,152 /proc/sys/kernel/shmall
shmmax half of physical memory (in bytes) /proc/sys/kernel/shmmax
shmmni 4,096 /proc/sys/kernel/shmmni
file-max 6,815,744 /proc/sys/fs/file-max
ip_local_port_range 1024 - 65000 /proc/sys/net/ipv4/ip_local_port_range
)
Применил настройки с помощью /sbin/sysctl -p и перезагрузил сервер. Сделал для указания, куда должны падать временные файлы установки следующее:
export TB_INST_TMP_DIR=/opt
Все приготовления завершены. Запускаем установщик. Параллельно с инструкцией, проходя по установщику, я решил кое-что поправить под себя. Например раскидывание логов на несколько файлов. В результате установщик сказал мне: «Все супер, можно запускаться». Однако запуститься у меня не получилось. Во-первых надо было сделать вот что:
source ~/.profile
После этого, мне уже не говорили о том, что такой программы нет, а просто сказали: «Tip file open failure.: No such file or directory». Долгое копание в интернете не привело ни к чему разумному. Документация утверждала, что корень зла в не установленном TB_SID, но TB_SID был установлен, а программа все равно была недовольна. Пришлось запустить создание базы данных и выставить все настройки в значение «По умолчанию». После этого наступил успех! База заработала.
После этого возникло желание покинуть гугловый сервер и настроить клиент. Но официальная документация предлагает скачать файл-установщик клиента, с примером исключительно для Windows и умалчивая, где же этот файл все-таки взять.
Пытаясь поставить клиент через установщик СУБД на моём ноутбуке с Ubuntu я обнаружил чудное соответствие документации и реальности. ключ -G приводит к helpу, а не графическому режиму, а для графического режима надо использовать -i gui или -i swing, однако ни первый, ни второй не захотели работать на Ubuntu уверяя меня, что Installer user interface is not supported.
В итоге мне пришлось поставить целиком Tiberoна мой ноутбук с Ubuntu. Прогнать source ~/.profile После этого найти аналог TNSNAME.ora. Находится он в папке $TB_HOME/client/config и называется tbdsn.tbr.
Формат он имеет до боли знакомый:
DBTNS=
(
(INSTANCE=(HOST=hostname)
(PORT=port)
(DB_NAME=DB_NAME)
)
)
И… Победа! По команде:
tbsql sys/syspassword@DB_TNS
Я подключился к базе на удаленном хосте (пляски с бубнами вокруг firewall я оставлю за кадром).
Можно сказать, что для каких-то тестов система уже готова.
Тесты производительности адекватные я не делал, так как не мой все-таки профиль. Может, кто заинтересуется и сделает. Для себя могу сказать, что отличий внешних от Oracleмало. Даже их новый язык PSM выглядит так:
CREATE [OR REPLACE] PACKAGE BODY book_manager IS
PROCEDURE add_new_book(v_author VARCHAR2, v_name VARCHAR2,
publish_year DATE) IS
BEGIN
IF substr(v_name, 1, 1) >= 'a' AND
substr(v_name, 1, 1) < 'k' THEN
INSERT INTO books
VALUES (1, v_author, v_name, publish_year);
ELSE
INSERT INTO books
VALUES (2, v_author, v_name, publish_year);
END IF;
COMMIT;
book_cnt := book_cnt + 1;
END;
PROCEDURE remove_lost_book(v_author VARCHAR2, v_name VARCHAR2) IS
BEGIN
DELETE FROM books WHERE author = v_author AND name = v_name;
COMMIT;
END;
FUNCTION search_book_position(v_author VARCHAR2, v_name VARCHAR2)
RETURN NUMBER IS
book_position NUMBER;
BEGIN
SELECT kind INTO book_position FROM books
WHERE author = v_author AND name = v_name;
RETURN book_position;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NOT EXIST...SORRY');
RAISE;
END;
FUNCTION get_total_book_cnt RETURN NUMBER IS
BEGIN
RETURN book_cnt;
END;
BEGIN
book_cnt := 0;
END;
Пока по документации и по объему информации продукт мне показался неспособным выйти на широкий круг эксплуатации. Но, может быть, он чего-то стоит и надо к нему присмотреться?
Всем спасибо, удачи и пока!