В кінці липня 2016 року в корпоративному блозі Über з'явилася воістину історична стаття про причини переходу компанії з PostgreSQL на MySQL. З тих пір в жарких обговореннях цього матеріалу було зламано чимало списів, аргументи Über були ретельно препаровані; компанію звинуватили в упередженості, технічної неграмотності, нездатності ефективно взаємодіяти з спільнотою та інших смертних гріхах, при цьому по гарячих слідах Postgres було внесено кілька змін, покликаних вирішити деякі з описаних проблем. Список наслідків на цьому не обмежився, і його можна продовжувати ще дуже довго.
Напевно, не буде перебільшенням сказати, що за останні кілька років це було одне з найбільш гучних і резонансних подій, пов'язаних з СУБД PostgreSQL, яку ми, до речі сказати, дуже любимо і широко використовуємо. Ця ситуація напевно пішла на користь не тільки згаданим систем, але і руху Free and Open Source в цілому. При цьому, на жаль, російського перекладу статті так і не з'явилося. Зважаючи на значущість події, а також докладного і цікавого з технічної точки зору викладу матеріалу, в якому стилі Postgres vs MySQL йде порівняння фізичної структури даних на диску, організації первинних і вторинних індексів, реплікації, MVCC, оновлень і підтримки великої кількості сполук, ми вирішили заповнити цей пробіл і зробити переклад оригінальної статті. Результат ви можете знайти під катом.
Читати далі →

Введення:
У цій статті мова піде про роботу з Microsoft Analysis Services і трохи про сховище Microsoft SQL Server, з яким AS працює. Мені довелося зіткнутися з не зовсім тривіальними речами і деколи доводилося стрибати через голову" заради того, щоб зробити те, що від мене хочуть. Працювати доводилося в перервах між нарадами. Деколи новий функціонал обговорювалося довше, ніж розроблявся. Часто на нарадах, за кілька разів, доводилося розповідати одне і теж. Коли я сказав, що мені складно радитися довше однієї години, на мене подивилися з подивом і нерозумінням. Багато в чому, завдяки такій обстановці і з'явилися ці, не зовсім тривіальні речі, про які я вирішив написати.

Читати далі →

Я продовжую писати про Битриксе в контексті обмінів, Mysql і командного рядка Linux.

Ця стаття є вступною до серії статей про структуру бази даних Бітрікс, де ця тема буде розкрита досить докладно. Для початку будуть представлені рішення деяких невеликих, але настирливих завдань. Як завжди, знання SQL обов'язково.

У статті розглядаються досить приватні питання, які виникають щодня. Звичайно, ви можете використовувати ці матеріали за їх прямим призначенням, але головна мета статті не в цьому. Я починаю розкривати «чорний ящик» під назвою «структура бази даних бітрікс», і показувати, що ці знання можуть знадобитися для підвищення рівня володіння як системою, так і базовими технологіями (SQL, linux shell), що, звичайно, допомагає вирішувати нові, складні, цікаві, різноманітні завдання.

Сторінка, з якої можна робити SQL запити до бд, або mysql web клієнт бітрікс, знаходиться в панелі управління Битрикса по шляху: Настройки->Інструменти->SQL запит».

Також, звичайно, можна робити запити з командного рядка операційної системи, для чого можу запропонувати вам нескладну операцію з отримання логіна та пароля з налаштувань Битрикса:

log=$(grep -i "login" /home/bitrix/www/bitrix/php_interface/dbconn.php | cut -f2 -d'"')
pas=$(grep -i "pass" /home/bitrix/www/bitrix/php_interface/dbconn.php | cut -f2 -d'"')
mysql -u$log -p$pas $log

— таким чином можна отримати логін і пароль до бази даних Mysql Bitrix з командного рядка linux на bash. Шляхи, звичайно ж, замініть на ваші власні. У варіанті, що надається виртаульной машиною Бітрікс, DOCUMENT_ROOT виглядає як /home/bitrix/www/.

Читати далі →

Безліч комерційних сайтів початкового і середнього рівня просунутості часто стикаються з різноманітними проблемами баз даних. В таких проектах навряд чи є свій адміністратор баз, а інші співробітники не можуть або просто не мають часу на дійсно якісну налаштування чищення, реплікації, бекапів та інших обов'язкових процедур. А ще рідше це вдається вчасно все це контролювати і приймати необхідні заходи. Що ж робити? Один з варіантів рішення пропонує сервіс моніторингу ХостТрекер.




Читати далі →



Роман Гребенніков пояснює складність побудови розподілених систем. Це — доповідь Highload++ 2016.

Всім привіт, мене звати Роман Гребенніков. Я працюю в компанії Findify. Ми робимо пошук для онлайн-магазинів. Але розмова не про це. У компанії Findify я займаюся розподіленими системами.

Що ж таке розподілені системи?

Читати далі →

Ми вже кілька років робимо наш продукт автоматизації маркетингу, і пиляти фічі з високою швидкістю нам допомагає CI, а точніше — велика кількість автоматичних тестів.

У продукті приблизно 700 000 рядків коду з усіма кастомизациями, і на це ми маємо близько 7 000 тестів, і їх кількість постійно зростає. За рахунок них ми не боїмося робити великі рефакторинги, що зачіпають багато частин системи. Але, на жаль, тести не панацея. Якихось тестів може не бути, якісь тести можуть виявитися занадто дорогими, а якісь ситуації не відтворюються в тестовій середовищі.

Практично кожна транзакція в нашій системі пов'язана з роботою з MS SQL з використанням LinqToSql. Так, технологія старенька, але мігрувати з неї нам досить складно, і по бізнесу вона нас цілком влаштовує. Більш того, як я вже писав раніше, у нас навіть є свій форк LinqToSql, де ми трохи чиним його баги і додаємо деякий функціональності.

Для того, щоб робити запити до БД, використовуючи LinqToSql, потрібно використовувати інтерфейс IQueryable. В момент отримання Enumerator'а чи виконання Execute у QueryProvider'а побудоване дерево виразів з допомогою Extension-методів до IQueryable транслюється в SQL, який і виконується на SQL Server.

Так як наша бізнес-логіка сильно зав'язана на сутності в базі даних, наші тести багато працюють з базою даних. Однак у 95% тестів ми не використовуємо реальну базу, так як це дуже дорого за часом, а задовольняємося InMemoryDatabase. Вона є частиною нашої тестової інфраструктури, про яку можна написати окрему статтю, і насправді представляє з себе просто Dictionary<Type, List> для кожного існуючого типу сутності. У тестах наш UnitOfWork прозоро працює з такою базою, даючи доступ до EnumerableQueryable, який просто отримати з будь-якого IEnumerable, викликавши у нього AsQueryable().

Покажу приклад тесту для розуміння того, що відбувається:

Читати далі →



Віктор Тарнавський показує, що воно працює. Перед вами розшифровка доповіді Highload++ 2016.

Доброго дня. Мене звати Віктор Тарнавський. Я працюю в «Яндексі». Розповім про дуже швидку, дуже відмовостійку і супермасштабируемую базу даних ClickHouse для аналітичних задач, яку ми розробили.

Пару слів про мене. Мене звати Віктор, я працюю в «Яндексі» і керую відділом, який займається розробкою аналітичних продуктів, таких як «Яндекс.Метрика» та «Яндекс.AppMetrica». Я думаю, багато хто з вас користувалися цими продуктами і знають їх. Ну і в минулому і досі пишу багато коду, а ще раніше займався розробкою заліза.

Читати далі →

Ця стаття присвячена створенню моделі даних, яка красиво лягала б на SQL і містила в собі «правильне» ООП спадкування. Треба сказати, що ця задача виникала у мене в різний час на різних проектах, і вирішувалася вона там теж по-різному. Назви підходів взяті з ситуації на відповідних проектах термінології.

Читати далі →