|
MariaDB ColumnStore
|
|||
---|---|---|---|
#18+
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) сек ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 10:41 |
|
MariaDB ColumnStore
|
|||
---|---|---|---|
#18+
авторРолг Хупин, Возможен подвох: "Операция 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 14:28 |
|
MariaDB ColumnStore
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.02.2022, 14:43 |
|
MariaDB ColumnStore
|
|||
---|---|---|---|
#18+
Всё-таки продолжил изучать 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/ ... |
|||
:
Нравится:
Не нравится:
|
|||
27.02.2022, 22:35 |
|
|
start [/forum/topic.php?fid=47&msg=40135364&tid=1827764]: |
0ms |
get settings: |
18ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
119ms |
get tp. blocked users: |
2ms |
others: | 366ms |
total: | 587ms |
0 / 0 |