Рубрика «базы данных» - 47

Уважаемые коллеги, которые сталкивались с классификатором адресов Российской Федерации КЛАДР знают, насколько это странная база (в первую очередь своей структурой), а так же большим количеством неточностей в самих данных.

В 2011 году за дело взялась ФНС, которая начала разрабатывать новую единую базу Федеральной информационной адресной системы (ФИАС) для того, что бы покончить с адресным бардаком, царящим среди различных ведомств.Читать полностью »

Как уже заявлялось ранее, наша система «Е1 Евфрат» обеспечивает возможность единовременной работы сразу с несколькими различными СУБД, реализуя принцип кроссплатформенности.

Первой реляционной СУБД (не считая, конечно, СУБД НИКА) с которой удалось обеспечить интеграцию стала Microsoft SQL Server 2005/2008. Эта СУБД показала себя как наиболее универсальная и не проблемная. Для быстроты поиска и для решения задач интеграции информационных систем через СУБД структурированные данные документа раскладываются в соответствующие схеме поля таблиц реляционной базы. XML возможности MS SQL Server показали худшую производительность в поисковых запросах. ДляЧитать полностью »

Тестировать или нет классы, взаимодействующие с Базой данных — вопрос куда более холиварный, чем спор «покрывать код тестами или нет». Просмотрев свой проект, нам стало очевидно, что львиная доля классов основана на взаимодействии с базой данных. Поэтому было однозначно решено: «тестированию быть».
Далее я хочу поделится опытом написания модульных тестов для кода, работающего с базой данных.

PHPUnit содержит расширение для тестирования базы данных. Расширение выполняет следующие функции:

  • перевод базы данных в заранее известное состояние,
  • выполнение необходимых модификаций данных,
  • проверка, что в базе данныхЧитать полностью »

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

> SELECT avg(amount) FROM transfer;
65.125965782378
generated in 3850 seconds

А теперь представим, что показатель должен быть свежайшим, а записи в таблицу делаются каждую секунду, и за месяц их набираются миллионы. Или другие требования, но суть та же — агрегировать те же данные каждый раз очень затратно. Обычные базы данных не предлагают таких оптимизаций. Как быть?

Как не пересчитывать суммы и средние каждый разЧитать полностью »

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

Данные в информационных системах могут быть самыми разнообразными: от совсем не структурированныхЧитать полностью »

.NET / Миграции БД для .NET — новый ECM7.Migrator
О проблеме внесения изменений в БД в ходе разработки приложения писали на Хабре много раз.Версионная миграция БД — удобный подход к решению проблемы.
Уже долгое время я участвую в разработке ECM7.Migrator — инструмента для автоматизации изменений БД. О том, как его использовать и почему это удобно, мы писали здесь.
8 месяцев назад мы выпустили версию 2.0, а на этой неделе вышла версия 2.6. По сравнению с версией 2.0 многое изменилось.Полностью переписаны классы всех провайдеров: API стал проще и удобнее, все методы работают адекватно (а для проверки адекватности было написано большое количество модульных тестов);
Поддержка SQL AzureЧитать полностью »

Доброго времени суток. Многие из вас, кто так или иначе соприкасался с веб-разработкой, знают о таком удобном способе обращения к БД как ActiveRecord, чуть меньше человек согласиться, что это действительно очень удобно, примерно столько же понимает, что это далеко не всегда лучшее решение для проекта из соображений производительности. И это действительно так, но можно много чего придумать для избавления от этих проблем: кеширование всего и вся, различные архитектурные ухищрения и т.д.
Именно различными улучшениями AR мы и займемся на протяжении всего цикла этих статей :)
Если уж совсем подробно: мы будем вместе писатьЧитать полностью »

MySQL / немного о SELECT… FOR UPDATE и GET_LOCK
Для примера рассмотрим такой случай.
У нас есть MySQL база, в которой есть таблица queue. В эту таблицу поступают задания для выполнения.
Задания должны распределяться между процессами. Одна и та же задача не должна попасть к разным процессам.
Для решения задачи можно воспользоваться SELECT … FOR UPDATE.
Каждый процесс для получения задачи будет выполнять вот такой запрос.SELECT id FROM queue WHERE is_run = 0 ORDER BY date_task ASC LIMIT 1 FOR UPDATE
И помечать эту полученную задачу как занятую.UPDATE queue SET is_run = 1 WHERE id = ?
Теперь рассмотрим диаграмму работы процессов.
Процессы выполняются последовательно. Получается, что FOR UPDATE блокируетЧитать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js