Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

Играть

Топ прошлой недели

  • SpongeGod SpongeGod 1 пост
  • Uncleyogurt007 Uncleyogurt007 9 постов
  • ZaTaS ZaTaS 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
39
IliaHohlov
IliaHohlov
2 года назад
Лига программистов

MySQL: зачем нужны MyISAM таблицы, когда есть InnoDB⁠⁠

MySQL: зачем нужны MyISAM таблицы, когда есть InnoDB Mysql, Oracle, SQL, Программирование, IT

MySQL уверенно занимает второе место в мире по популярности среди реляционных СУБД, поэтому сегодня я решил написать немного про неё, вернее про типы её таблиц.

Всем, кто разрабатывает в MySql хорошо известно, что при создании таблиц в этой СУБД необходимо выбирать их тип (ещё это называют "движок"). В оригинале эта характеристика таблиц называется (storage) engine.

Есть два основных типа таблиц в MySQL (два основных storage engine): MyISAM и InnoDB. Примечательно, что в старых версиях СУБД, по-умолчанию, при создании таблиц, предлагалось их создавать с типом MyISAM. Начиная с MySQL 8.0 теперь по-умолчанию предлагается тип InnoDB.

Главным отличием таблиц этих двух типов является то, что таблицы MyISAM не поддерживают транзакции. Операции по вставке, изменению или удалению данных нельзя отменить (ROLLBACK не откатывает выполненные команды). Тип MyISAM обязательно указывают для таблиц, данные в которых должны быть вставлены/изменены/удалены вне зависимости от состояния основной транзакции, так как эта основная транзакция выполняющейся программы в некоторых случаях может быть отменена (например, в случае ошибки или другой непредвиденной ситуации, и вместе с откатом транзакции все данные во всех таблицах должны вернуться на место).

Итак, теперь для чего бывает нужно откатывать изменения в данных всех таблиц, кроме некоторых.

Программисты стараются делать программное обеспечение работающим всегда без ошибок, но в случае их возникновения, хотели бы иметь сохранённые данные о последовательности выполненных пользователем действий и состояния обрабатываемых данных. Эту информацию нужно сохранить в специальные таблицы (таблицы логирования) так, чтобы при откате изменений всех таблиц, данные в таблицах логирования тоже не откатились. В разных СУБД эта возможность реализуется разными способами. В ORACLE, например, используются АВТОНОМНЫЕ ТРАНЗАКЦИИ. То есть сохранение логируемых данных делается в отдельной независимой от главной транзакции (в автономной) и при откате/отмене главной транзакции, данные, вставленные отдельной (автономной) транзакцией, не будут откачены, а будут сохранены!

В MySQL нет возможности создавать автономные транзакции, но зато можно создать такие таблицы, данные из которых не откатывались бы при выполнении ROLLBACK - это таблицы с типом MyISAM.

Буду рад твоему лайку, если статья понравилась.

Напомню, что у нас есть два мощных курса по SQL и базам данных: общий, где ты научишься всему с нуля (или восполнишь множество пробелов), научишься писать запросы, работать с базами данных на примере ORACLE, и есть курс по программированию в PL/SQL (ORACLE). Он уже только для "ораклистов". В нем мы научимся не только кодировать на PL/SQL, но и разрабатывать сложные алгоритмы и пользоваться всеми средствами, что даёт ORACLE.

Показать полностью
[моё] Mysql Oracle SQL Программирование IT
6
398
mimokrokodilchik
mimokrokodilchik
2 года назад

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..."⁠⁠

В прошлой статье я рассказал о таком понятии как VPS (Virtual Private Station).

Проще говоря, это виртуальный компьютер внутри обычного сервера (Dedicated Server). Настроим инфраструктуру, необходимую для создания промышленных приложений. Познакомимся с тем как работать с linux серверами.

Не буду рекомендовать какой то конкретный курс. Можно зайти на ютуб и вбить "Linux для начинающих" или найти книги просто загуглив "линукс начинающим pdf".

Для начала работы с линуксом нужно знать:

  • В какой папке вы находитесь и как сменить папку (pwd, cd)

  • Как создавать папки, файлы и как их читать и писать в них, как искать нужные файлы (mkdir, touch, vim, find)

  • Понимать самые основы прав и пользователей, как их создавать и пользоваться ими (chown, chmod, id, su)

  • Как устанавливать и запускать приложения (apt-get update/install/remove)

  • Как писать простейшие скрипты и запускать (bash scripts)

  • Уметь проверять состояние сервера - загрузка CPU/RAM/HDD (top, free, df)

  • Уметь проверять процессы и останавливать их (ps, kill)

  • Уметь проверить, закрыть порт (netstat и еще парочка)

К этому списку можно обавить пару команд но для начала работы этого будет достаточно. На изучение базовых операций может уйти месяц - другой, в зависимости от предыдущего опыта.

Устанавливаем на сервер необходимую для разработки инфраструктуру.

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Раньше большинство инфраструктуры ставили прямо на сам сервер.

Сейчас используют разные решения виртуализации и её оркестрации, например: Docker, Kubernetes и множество других (но часть инфраструктуры продолжают ставить прямо на сервер).

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

Минимум, который нужно знать про Docker:

  • Понимать разницу между образом и контейнером (контейнер по сути экземпляр образа)

  • Уметь запускать и останавливать контейнер (docker run, stop, start)

  • Уметь подключаться к контейнеру (docker attach / docker exec)

  • Уметь проверять работу контейнера (docker ps, docker logs)

Для чего это нужно?

Изучение основ Linux и Docker - процесс не из самых легких. Все это стоит того, чтобы научиться поднимать инфраструктуру в несколько минут.

Ниже я приведу примеры классических контейнеров, которые пригодятся при изучении промышленной разработки.

Классический минимум

Рассмотрим пример архитектуры классического промышленного Java приложения:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Подобная инфраструктура вряд ли вместится в самую дешевую VPSку. Ниже я расскажу какие есть недорогие варианты.

Этот вариант архитектуры является классическим решением большинства веб проектов. Я привел его в качестве примера, который подойдет для новичка.

Используем докер для поднятия данной архитектуры.

Redis (один из многих вариантов кэшей)

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

Для простейшего варианта авторизации по паролю достаточно запустить команду:

docker run -d -p 6379:6379 --name myredis redis redis-server --requirepass <password>

Для удобства (необязательно) можно внутри докера стартовать веб интерфейс для просмотра redis сервера вот такой командой:

docker run -d --name myrediscommander -p 8081:8081 --link myredis:redis rediscommander/redis-commander

После старта админки можно зайти в браузер по адресу ВАШ_IP:8081 и затем подключиться к вашему серверу, чтобы просматривать/удалять/добавлять данные:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

RabbitMQ (Очередь, которая получает сообщения и оповещает подписчиков).

Rabbit позволяет получать и оповещать клиентов, подписавшихся на сообщения.

Для запуска очереди достаточно запустить:

docker run -d --name my-rabbitmq -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=myuser -e RABBITMQ_DEFAULT_PASS=mypassword rabbitmq:3-management

Через пару минут можете зайти в админку очереди, вбив в браузере IP_вашего_сервера:15672 и увидеть что то вроде:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Реляционная база данных MYSQL.

Реляционные базы данных являются неотъемлемой частью большинства решений. В нашем примере мы запустим одну из самых популярных MySQL:

docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 mysql:latest --default-authentication-plugin=mysql_native_password

Через пару минут сервер стартанет. К нему можно будет подключиться через какой - нибудь MySQL клиент, например Heidi SQL.

С помощью клиента можно легко писать запросы и проверять содержание базы данных. Выглядеть он может примерно так:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Минимальные требования к подобной инфраструктуре.

Если вы хотите пользоваться докером в арендованном сервере вам желательно иметь 2 процессора и 2 Гб оперативки. Система запустится, но будет работать на минималках. Этого достаточно, чтобы изучить данные технологии.

Какие есть недорогие варианты поднятия инфраструктуры без больших затрат?

  • Запуск на локальной машине с тунелированием данных. В таком случае все запросы на VPS будут перенаправлены на домашний компьютер. В следующих статьях я покажу как это сделать.

  • Почасовая аренда VPS. Если вы хотите проверить какие - нибудь решения и вы знаете, что это займет несколько часов, есть смысл аренды VPS с почасовой оплатой. В среднем 8 ядерный VPS с 8gb RAM будет стоить порядка 5-12 рублей в час. Конкретного провайдера рекламировать не буду, я пользовался тремя и в такой диапазон цен укладывался.

  • Использование облаков. Данный метод я не рекомендую, за исключением тех решений, которые не тарифицируют трафик или что нибудь еще. С облаками вроде AWS можно влететь на большие деньги и новичкам я советую избегать их в начале пути.

Как еще можно использовать арендованный сервер?

Кроме разработки, сервер может подарить вам ряд бесплатных, либо условно бесплатных сервисов, которые могут вам пригодиться для работы или игр. Приведу пару примеров.

Запускаем чат сервер MatterMost

Допустим, вам надо создать чат - платформу для группы в университете или на работе с каналами, обменом приватными сообщениями с тектом и картинками. Вместо платных платформ можно запустить MatterMost сервер. К нему можно будет подключиться с компьютера или мобилки. Все это можно скачать и установить бесплатно.

Запустить сервер можно командой ниже:

docker run --name matt -d --publish 8065:8065 --add-host dockeermost/mattermost-preview

После нескольких минут к серверу можно подключиться, вот как выглядит клиент чата:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Хостим MineCraft

Для старта сервера MineCraft понадобится:

Cкачать или скопировать вручную вот такой docker-compose.yml файл: https://pastebin.com/raw/uEP58DRB сделать это можно командой

curl -o docker-compose.yml https://pastebin.com/raw/uEP58DRB

Затем, находясь в той же директории, надо запустить

docker compose up

После старта сервера нужно подождать какое то время. Затем, можно подключиться к миру, используя Minicraft клиент, указав IP вашего сервера:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Вот как выглядел мир в моем примере:

Продолжение "Простейший способ ускорить изучение мира программирования. Арендуем копеечный сервер..." IT, Программирование, Linux, Программист, Разработка, Docker, Mysql, Redis, Minecraft, Длиннопост

Я перечислил часть возможных решений в качестве примера.

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

Сама разработка на Java.

В следующей части я покажу как писать простейшие приложения и использовать созданную инфраструктуру.

Больше о Java и смежных технологиях можете узнать тут.

Показать полностью 8
[моё] IT Программирование Linux Программист Разработка Docker Mysql Redis Minecraft Длиннопост
147
Shawurma
Shawurma
2 года назад
Инкогнито
Серия ITшник

Топ 3 книги для начинающих Web-Программистов⁠⁠

📖"HTML и CSS: Дизайн и верстка веб-сайтов" автора Джон Дакетт. Эта книга является классикой в области веб-разработки и предназначена для новичков, которые только начинают изучать HTML и CSS. Она покрывает основы верстки веб-страниц, включая работу с изображениями, формами и таблицами.

📖 "JavaScript и jQuery: Интерактивные веб-страницы" автора Джон Дакетт. Эта книга предназначена для тех, кто уже знаком с HTML и CSS и хочет научиться создавать интерактивные веб-страницы с помощью JavaScript и библиотеки jQuery. В книге описываются основы JavaScript, а также способы использования jQuery для создания анимаций, работы с формами и многое другое.

📖"Изучаем PHP и MySQL" автора Линн Бейли. Эта книга предназначена для тех, кто хочет научиться создавать динамические веб-сайты с помощью PHP и баз данных MySQL. Книга покрывает основы PHP, включая работу с переменными, функциями и массивами, а также описывает способы подключения к базе данных MySQL и работу с ней.

Скачать в телеге

Топ 3 книги для начинающих Web-Программистов Программирование, IT, Программист, Сайт, Web-программирование, PHP, Mysql, Javascript
[моё] Программирование IT Программист Сайт Web-программирование PHP Mysql Javascript
0
18
Аноним
Аноним
2 года назад
GNU/Linux

MySQL даёт большую загрузку в гостевой системе⁠⁠

MySQL даёт большую загрузку в гостевой системе Mysql, Виртуальная машина, Linux, Системное администрирование, IT

На виртуалке (хост хз какой linux, гостевая gentoo) висит MySQL без нагрузки. Сам mysqld в top видно что ничего не грузит, но при запуске load average системы возрастает с 0.3 до ~3.2.
Поставил innodb_read_io_threads, innodb_write_io_threads, innodb_purge_threads в минимум (остальное там менял только что касалось памяти - буфера и тд), изменений не дало.
Гугль по теме сломан.

Я не настоящий 0дмин - моё предположение, что какими-то syscall-ами грузит ядро.
ps на "голых" машинах юзал всё это давно и много - проблем нет.

Mysql Виртуальная машина Linux Системное администрирование IT
25
37
nekko
nekko
2 года назад
ДЕВОПСИНА

ORDER BY ОТЧАЯНИЕ DESC⁠⁠

ORDER BY ОТЧАЯНИЕ DESC Mysql, Футболка, IT юмор, IT

Источник айти мемов

Показать полностью 1
Mysql Футболка IT юмор IT
16
6
Praved
2 года назад
Лига Сисадминов

Импорт данных из excel⁠⁠

Доброго времени суток. Возникла необходимость импорта данных из excel в mysql средствами php. Мануалов по данной теме много, но что то не работает. Если есть возможность помогите с данным вопросом. Возможно за небольшую благодарность.
В таблице 12 столбцов. Данные в основном текстовые только один столбец с датой. Импорт средствами mysql phpmyadmin не подходит. При импорте таблица содержит порядка 80 000 строк.

[моё] Mysql Microsoft Excel PHP Текст
37
0
TyuleshPelmesh
2 года назад
Лига программистов

Производительность БД с одной и многими таблицами. Мини-тест⁠⁠

В прошлом посте обмолвился, что собираюсь в своей базе данных завести каждому пользователю по табличке. Ну потому что у меня запросы всегда только для одного пользователя, а значит можно сэкономить ресурсы сервера на индексации, так я думал. Мне накидали полную панамку что так делать нельзя, но почему – никто особо не объяснил. И я решил бахнуть небольшой тест на нескольких БД – проверить что там будет на самом деле.

Для ЛЛ: В большинстве случаев выдавать каждому пользователю по таблице действительно нет смысла. Но для SQLite запросы обрабатываются ощутимо быстрее, если у каждого пользователя своя табличка.

Итак, тестовая задача, более- менее приближенная к моему сценарию:

периодически пользователи закидываеют в БД записи в которой есть ID пользоватея, время записи, текстовая метка (комментарий) и какой-то параметр (число)

INSERT INTO mega_table (id, dt, txt, dat_stat) VALUES ( %s, %s, %s, %s )

после наполнения базы пользователями иногда запрашивается статистика по тому самому числовому параметру за какой-то период времени и с определенным комментарием

SELECT SUM( dat_stat ) FROM mega_table WHERE id=%s AND dt < %s AND dt > %s AND txt = %s

Проверял 3 БД: MySQL сдвижками InnoDB и MyISAM, SQLite и Postgres. Написал скрипт, который эмулирует заполнение БД и запросы к ней, и измеряет сколько времени занимает добавление записи и выполнение запроса. Скачать скриптец можно тут (он сугубо тестовый, т.е. стрёмный и без никакой обработки ошибок, уж сорян). Менял количество пользователей и количество записей у каждого пользователя и смотрел что будет если всё писать в одну таблицу, либо каждому пользователю создавать отдельную. Заодно после выполнения скрипта посмотрел сколько полученные базы данных занимают места на диске.
И вот получились такие таблички.

Производительность БД с одной и многими таблицами. Мини-тест Программирование, Python, IT, Mysql, Postgresql, База данных, Тест, Чайник, Длиннопост
Производительность БД с одной и многими таблицами. Мини-тест Программирование, Python, IT, Mysql, Postgresql, База данных, Тест, Чайник, Длиннопост
Производительность БД с одной и многими таблицами. Мини-тест Программирование, Python, IT, Mysql, Postgresql, База данных, Тест, Чайник, Длиннопост

Какие выводы я для себя сделал.

Во первых видно, что если делать по таблице для каждого пользователя, то и добавление записи, и обработка запроса и размер БД получаются вобщем не лучше, чем если завести одну таблицу на всех. Единственное исключение – выполнение запросов в SQLite (и в некоторых случаях для Postgre) может быть в разы быстрее на многих таблицах, чем на одной. Почему так получается? Думаю потому что БД люто заоптимизированы очень крутыми чуваками под определенные сценарии использования. И если ты не столь-же крут (я лично нет), то нужно выбрать наиболее подходящую БД и подгонять свою задачу под типичные сценарии использования этой БД.

Во вторых если мне важнее скорость добавления/чтения (т.е. экономить вычислительные ресурсы) то из протестированных лучше пользовать Postgres, если важнее экономить место на диске – то MySQL с движком MyISAM. MySQL с движком InnoDB где-то посередине.

В третьих SQLite неожиданно всех обошел в скорости выполнения запросов (для моего случая по крайней мере). Прикольно.

Ну и в четвертых, питоновская обёртка для SQL-запросов про которую я писал в прошлом посте таки упростила бы мне написание тестового скрипта, но для чистоты эксперимента пришлось её отложить в сторону.

В любом случае это было интересно сделать, надеюсь кому-то было интересно и почитать.

Показать полностью 3
[моё] Программирование Python IT Mysql Postgresql База данных Тест Чайник Длиннопост
29
5
PHPProg
PHPProg
2 года назад
Программирование на PHP

Поиск в файлах CSV через базу данных⁠⁠

Имеется папка с большим количеством файлов формата CSV, все они одной структуры(столбцы одинаковы)

Поиск в файлах CSV через базу данных PHP, Csv, Mysql, Обработка данных, Vin, Длиннопост

Файлы CSV являются текстовыми и имеют структуру через разделение символом ;

Сделаем обработку файлов и сохранение в базу данных

В общем виде, открываем файл на чтение, читаем каждую строку, получаем данные столбцов и сохраняем в таблицу:

$DIR = 'data/';
$files = scandir($DIR);
foreach($files as $k => $file)if($file!='.'&&$file!='..'){
$cfile = $DIR.$file;
$pi=pathinfo($cfile);
$open = fopen($cfile, "r");
$strnum=0;
while (($data = fgetcsv($open, 10000, ";")) !== FALSE){
$data = array_map( "convert", $data );
if($strnum>$proc['pos']){
DB_insert($DB,$data,$file);//записываем в таблицу
}
}
fclose($open);
}
function convert( $str ) {//преобразуем кодировку для базу данных
return iconv( "Windows-1251", "UTF-8", $str );
}

Код обходит указанную папку, открывает каждый файл и заносит данные в базу данных. Процесс долгий и его необходимо выполнять в консоли или реализовывать процесс сохранения этапа работы в отдельный файл и при новом вызове брать параметры.

function DB_insert($DB,$data,$file){
$values = array();
$kol=0; $i=0; foreach($polya as $k => $v){
if(isset($data[$i])&&$data[$i]!='') $values[] = '"'.$DB->rescape($data[$i]).'"';
else { $values[] = '""'; $kol++; }
$i++;
}
if(count($polya)!=$kol){
$sql = 'INSERT INTO tablevins VALUES(0,"'.$DB->rescape($file).'",'.implode(',',$values).');';
$rez = $DB->QUR($sql);
}
}

Реализация WEB интерфейса для поиска данных

Поиск в файлах CSV через базу данных PHP, Csv, Mysql, Обработка данных, Vin, Длиннопост

Поиск происходит по двум полям VIN и номеру кузова. Опция «тип поиска» позволяет объединять искомые по условию «И» или «ИЛИ»

Функция для поиска в таблице данных, универсальная и получает опции поиска через переменную $data

function DB_search($DB,$data){
$out = array(); $usl = array();
foreach($data['where'] as $k => $v){ if($v!=''){
$usl[] = $k.' LIKE "%'.$DB->rescape($v).'%"';
}
}
if(count($usl)){
$tip = ' OR '; if($data['tipsearch']==1) $tip = ' AND ';
$sql = 'SELECT * FROM tablevins WHERE '.implode($tip,$usl);
$rez = $DB->QUR_SEL($sql);
if(!$rez['err']&&$rez['kol']){ $out = $rez['rez']; }
}
return $out;
}

Более подробно можно посмотреть на https://alneo.ru/2022/12/poisk-v-fajlah-csv/

Показать полностью 1
[моё] PHP Csv Mysql Обработка данных Vin Длиннопост
15
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии