powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDB ColumnStore
4 сообщений из 29, страница 2 из 2
MariaDB ColumnStore
    #40135343
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VDeltsov
авторPizzaPizza,

мои 5 копеек

"UPDATE и DELETE" нужно очень тщательно оценивать, так как эти операции деградируют индекс и сами очень тяжелы на исполнение

Применимость ColumnStore нужно тоже оценивать, так как это в вашем случае может выглядеть как только для логов, а для кого то логи и являются основными данными. Все зависит от архитектуры. EAV например вполне себе логоподобная система.


Вот только что понадобилась ручная операция DELETE из колоночной таблицы в MS SQL. Загрузили данные не из той базы.
15 000 строк удалилось за 0 секунд. Поэтому никаких проблем не вижу.

Подождать ноль секунд не так много,
чтобы говорить о том, что это настолько дорогая операция, что надо в проекте совсем отказаться от операции "UPDATE и DELETE".

Операция UPDATE = DELETE + INSERT. Если нужны не часто (например, обновляется лишь 1% записей), то никаких проблем нет.

Неужели никто в MySQL не пробовал колоночные таблицы? Есть там UPDATE и DELETE?
Насколько быстро работают select и insert?

Возможен подвох:
"Операция UPDATE = DELETE + INSERT" = 0 секунд = 1 сек + (-1) сек
...
Рейтинг: 0 / 0
MariaDB ColumnStore
    #40135364
VDeltsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторРолг Хупин,
Возможен подвох:
"Операция UPDATE = DELETE + INSERT" = 0 секунд = 1 сек + (-1) сек


Уважаемый тролль, читай внимательно, в MariaDB: операция DELETE = UPDATE.

При этом я удивлен, что несмотря на то, что MySql по популярности на втором месте после ORACLE, его не допилили, чтобы он устанавливался в три клика, как MS SQL, MS ACCESS*, или для примера тот же браузер Google Chrome. Про установку и настройку ORACLE я вообще молчу - он вообще в рейтинге не первом месте. Кто пытался сделать там SSO (вход без пароля доменным пользователем) - тот в следующий раз наверное застрелится или уволится, лишь бы этого не делать.

И, кстати, уважаемый тролль, по популярности MS ACCESS делит 3-4 место с MS SQL, так что Вы зря ехидно издевались над этой СУБД.

У меня буквально осенью - один небольшой проект на MS ACCESS, другой на MS SQL Server EXPRESS (+интерфейс в MS ACCESS). Во втором проекте под мини OLAP выбрал его, так как скорость в колоночных таблицах просто гиперзвуковая, при этом официально бесплатно. С учетом сжатия данные влезли бы и в одну базу 10 ГБт, но на всякий пожарный сделали под каждый отдельный (независимый) кусок свою базу. Поэтому даже ограничение в 10 ГБт не мешает. И всё это установилось на ноут без проблем за 5 минут вместе с прекрасной бесплатной SQL Server Management Studio.


YouTube Video
...
Рейтинг: 0 / 0
MariaDB ColumnStore
    #40135369
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VDeltsov
авторРолг Хупин,
Возможен подвох:
"Операция UPDATE = DELETE + INSERT" = 0 секунд = 1 сек + (-1) сек


Уважаемый тролль, читай внимательно, в MariaDB: операция DELETE = UPDATE.

При этом я удивлен, что несмотря на то, что MySql по популярности на втором месте после ORACLE, его не допилили, чтобы он устанавливался в три клика, как MS SQL, MS ACCESS*, или для примера тот же браузер Google Chrome. Про установку и настройку ORACLE я вообще молчу - он вообще в рейтинге не первом месте. Кто пытался сделать там SSO (вход без пароля доменным пользователем) - тот в следующий раз наверное застрелится или уволится, лишь бы этого не делать.

И, кстати, уважаемый тролль, по популярности MS ACCESS делит 3-4 место с MS SQL , так что Вы зря ехидно издевались над этой СУБД.

У меня буквально осенью - один небольшой проект на MS ACCESS, другой на MS SQL Server EXPRESS (+интерфейс в MS ACCESS). Во втором проекте под мини OLAP выбрал его, так как скорость в колоночных таблицах просто гиперзвуковая, при этом официально бесплатно. С учетом сжатия данные влезли бы и в одну базу 10 ГБт, но на всякий пожарный сделали под каждый отдельный (независимый) кусок свою базу. Поэтому даже ограничение в 10 ГБт не мешает. И всё это установилось на ноут без проблем за 5 минут вместе с прекрасной бесплатной SQL Server Management Studio.


YouTube Video
...
Рейтинг: 0 / 0
MariaDB ColumnStore
    #40136640
VDeltsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё-таки продолжил изучать MariaDB и ColumnStore. В том числе с целью изучения Docker. Оказалось очень удобная штука.

Основная суть Docker - можно за 5 минут получить уже настроенный LINUX с установленным приложением.

Итак по шагам инструкция.

1. Скачиваем и устанавливаем отсюда docker desktop под Windows 10.
Мне пришлось переставлять для этого ОС, так как был Windows 8.1.

https://www.docker.com/products/docker-desktop

2. Открываем командную строку (Win+R, пишем cmd, жмем OK)

3. Готовый образ MariaDB 10.6 Community Server (with ColumnStore 6.x) нашел в поиске:
https://hub.docker.com/r/mariadb/columnstore
От туда берем командную строку для запуска в cmd:
docker run -d -p 3306:3306 --name mcs_container mariadb/columnstore

4. Ждем несколько минут. И всё готово! Сервер работает.

5. Теперь из cmd в Windows подключаемся к консоли mariadb уже как бы внутри линукса, где можно писать sql-запросы:
docker exec -it mcs_container mariadb

6. В этой консоли создаем себе базу:
CREATE DATABASE olapbi;
show databases;

7. Создаем пользователя pl, даем права:
CREATE USER pl IDENTIFIED BY 'pass';
select user, host from mysql.user;
GRANT ALL PRIVILEGES ON olapbi.* TO pl;

8. Скачиваем и устанавливаем тут ODBC-драйвер под Windows:
https://mariadb.com/downloads/connectors/connectors-data-access/odbc-connector/

9. Вот тут скачиваем и устанавливаем MariaDB Server, но Database instance не ставим на Windows.
Тут нужна только HeidSQL, то есть программа администрирования MariaDB, написание запросов, создание таблиц и т.п.
https://mariadb.org/download/

10. Создаем ODBC нужной битности (в зависимости от битности приложения, которое будет соединяться).
У меня это MS SQL Server Express 64 битный, поэтому я установил 64-битный ODBC.
ODBC создается этой программой:
32-битное ODBC
C:\Windows\SysWOW64\odbcad32.exe
64-битное ODBC
C:\Windows\System32\odbcad32.exe

Добавляем новый DSN с названием MARIADBDOCKER на закладке системных DSN. Выбираем драйвер MariaDB ODBC Driver.
Для соединения к базе указывать IP-адрес вашего Windows-компьютера (если локально можно просто localhost), и порт 3306.
Вводим пользователя pl и пароль pass. Тестируем DNS и выбираем созданную базу olapbi. Сохраняем.

Всё готово!

11. Теперь идем в MS SQL Server -> Server Objects -> Linked Server. Создаем новую запись с названием MARIADBDOCKER.
Provider: Microsoft OLE DB Provider for ODBC
Product name: MARIADBDOCKER
Data Source: MARIADBDOCKER
Catalog: olapbi

Или создаем скриптом:
EXEC master.dbo.sp_addlinkedserver @server = N'MARIADBDOCKER', @srvproduct=N'MARIADBDOCKER', @provider=N'MSDASQL', @datasrc=N'MARIADBDOCKER', @catalog=N'olapbi'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'MARIADBDOCKER',@useself=N'False',@locallogin=NULL,@rmtuser=N'pl',@rmtpassword='pass'

12. Теперь создаем таблицы (сидя в MS SQL). Но можно просто в HeidSQL выполнить внутренность скрипта между опострофами '

exec ('CREATE TABLE olapbi.DivisionCS(
PrId int NOT NULL,
Buchgalt_PrId int NOT NULL,
Relation1C varchar(255) NULL,
PrName varchar(1024) NOT NULL,
PrGUID varchar(128) NOT NULL,
Parent_PrId int NULL,
DictionaryType_PrId int NOT NULL,
BaseDivision_PrId int NULL,
PrDivision varchar(255) NOT NULL
)COLLATE="utf8mb3_general_ci"
ENGINE=Columnstore') at MARIADBDOCKER

exec ('CREATE TABLE olapbi.DivisionRS(
PrId int NOT NULL,
Buchgalt_PrId int NOT NULL,
Relation1C varchar(255) NULL,
PrName varchar(1024) NOT NULL,
PrGUID varchar(128) NOT NULL,
Parent_PrId int NULL,
DictionaryType_PrId int NOT NULL,
BaseDivision_PrId int NULL,
PrDivision varchar(255) NOT NULL
)COLLATE="utf8mb3_general_ci"
') at MARIADBDOCKER

--Очистка таблиц (если надо)
exec ('truncate TABLE olapbi.DivisionRS') at MARIADBDOCKER
exec ('truncate TABLE olapbi.DivisionCS') at MARIADBDOCKER

--Заполнение обычной rowstore таблицы в MariaDB из локальной базы в MS SQL
--Это к сожалению выполняется 146 секунд всего на 30 000 строк.
insert into MARIADBDOCKER.olapbi..DivisionRS
select * from OLAPBI.dbo.Division

--Несколько раз копируем таблицу саму в себя, чтобы стал миллион строк.
--Это будет несколько секунд
exec ('insert into olapbi.DivisionRS
select * from olapbi.DivisionRS') at MARIADBDOCKER

--Заполняем ColumnStore таблицу из rowstore таблицы внутри MariaDB
--На миллион строк ушло 14 секунд
--Если вставлять из DivisionCS в DivisionCS, то тот же миллиона вставиться за те же 14 секунд.
exec ('insert into olapbi.DivisionCS
select * from olapbi.DivisionRS') at MARIADBDOCKER

--Теперь смотрим размер обычной rowstore таблицы (смотрел запрос уже в самой HeidSQL): 211 Мегабайт
SELECT table_schema, TABLE_NAME, round(((data_length + index_length) / 1024), 2) "Size in KB", data_length,index_length
FROM information_schema.TABLES
WHERE table_schema = "olapbi"
ORDER BY 1, 2

--Теперь смотрим размер columnstore таблицы: 50 Мегабайт
SELECT c.TABLE_SCHEMA, c.TABLE_NAME, sum(e.DATA_SIZE) AS DATA_SIZE
FROM INFORMATION_SCHEMA.COLUMNSTORE_COLUMNS c
inner join INFORMATION_SCHEMA.COLUMNSTORE_EXTENTS e ON e.OBJECT_ID = c.OBJECT_ID
GROUP BY c.TABLE_SCHEMA, c.TABLE_NAME
order by 1, 2;

Сжатие есть, но всего в 4 раза, хотя по факту там 30 копий одинаковых данных по 30 000 строк.

Размер этой же таблицы на миллион строк в MS SQL Server Express:
Rowstore MS SQL - 138 мегабайт (но тут не unicode, а просто varchar)
Columnstore MS SQL - 10 мегабайт.

Итого в MS SQL Server сжатие одинаковых данных - в 13 раз! То есть требуется меньше места на диске, а самое главное - меньше памяти. Поэтому на одном и том же сервере MS SQL будет при большой базе существенно выигрывать.

Теперь остался открытый вопрос: КАК вставлять данные в MariaDB через windows ODBC, чтобы они вставлялись быстро, а не по одной строке. Потому что вставка в ColumnStore таблицу там просто зависает и вставляется по 1 строке в секунду, но при попытке вставить через ODBC даже в обычную таблицу миллион строк - всё со страшной силой зависло, сожрало всю память и даже начал тормозить основной компа на Windows (vmmem от докера сожрал зачем-то всю память компа).

Вот тут предлагают предлагают либо каждый раз гонять все данные через csv-файлы.
Либо устанавливать и настраивать ENGINE=CONNECT через ODBC в линуксе.
Из коробки в этом докер-образе это не работает. Настроить ODBC в урезанном линуксе боюсь задача та ещё.
К тому же не решает проблему вставлять данные в базу с любого клиента ODBC.
https://mariadb.com/kb/en/moving-data-between-sql-server-and-mariadb/
...
Рейтинг: 0 / 0
4 сообщений из 29, страница 2 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDB ColumnStore
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]