Ответы пользователя по тегу Базы данных
  • Почему БД драйвер Python MySQL Connector работает на порядок быстрее чем в других языках?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1k строк отдельными инсертами специалльно вставляют обычно когда производительность по важности где то в далёком и светлом будущем, либо от недостатка опыта.

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

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

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    не юзайте внешние ключи, не удаляйте данные (только маркируйте как удаленные)
    Ответ написан
    3 комментария
  • Что значит "опыт прямой работы с базами данных без прослоек"?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    возможно имеется ввиду, самописными запросами, без использования query builder, orm,...
    Ответ написан
    Комментировать
  • Подходит ли influxDB для хранения логов?

    index0h
    @index0h Автор вопроса
    PHP, Golang. https://github.com/index0h
    Подходит ли influxDB для хранения логов?


    нет
    Ответ написан
    Комментировать
  • Как разбить транзакцию по микросервисам сохранив консистентность данных?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Если возникла проблема - очень большая вероятность того, что разделение на микросервисы было не корректным и стоит вернуться к монолиту.

    Что касается распределенных транзакций. Как минимум можно пытаться повторять запросы N раз, в противном случае откатывать на каждом из сервисов.

    Как вариант можно использовать всякие kafka для хранения истории сообщений с целью дальнейшего восстановления неотрботавших транзакций.

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

    Правильного варианта не существует. Все зависит от проекта
    Ответ написан
    4 комментария
  • Имеет ли право такой способ хранения текстов в виде архивов для оптимизации скорости работы?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Имеет ли смысл хранить текстовую информацию в файлах, ведь, по идее, это ССД и читаться из файла будет тоже быстро?

    Смысла в вашем случае нет. Почитайте на досуге, что такое inode и что происходит, когда они заканчиваются.

    Имеет ли смысл эти файлы архивировать, ведь фалы не большие и архивированный файл всеравно будет занимать примерно столько же места?

    Не имеет. Если на странице надо отобразить например 10 вакансий, а одну из них в данный момент редактирует другой пользователь вам придется еще обмазаться блокировками чтения записи, так же потратить кучу времени на разархивацию данных каждый раз. Это называется "просрать ресурсы".

    Имеет ли смысл разбивать архивы по папкам/подпапкам - чтобы не было очень много файлов в одной папке и не тормозило (помню по теории *никсовых систем что нельзя много миллионов файлов в одной папке хранить)?

    Для хранения файлов подобный подход имеет право на жизнь.

    Вообще такое решение имеет право на жизнь?

    Для вашей задачи - со всей силы нет. Полнотекстовый поиск вы не обеспечите, для организации контроля конкурентного доступа вам придется городить свои костыли, архивация и деархивация будут занимать много времени
    Ответ написан
    Комментировать
  • Как правильно использвать базы данных на странице php?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    в каком месте нужно закрывать соединение с БД?

    Перед завершением процесса. Хотя оно и так закроется.

    В каждом методе?

    Нет, постоянные реконнекты будут дорого стоить.

    --- Немножко Code Review ---

    // Не давайте общие имена конкретным реализациям
    // Почитайте, проникнитесь и используйте PSR-2 и PSR-4
    class DataBase
    {
        private $mysqli;
        private $dbConfig;
    
        public function __construct()
        {
    // Класс по работе с БД не должен знать даже о существовании неких файлов, где-то там. Это не его забота.
    // Передавайте в конструктор готовое подключение к БД, если нужно.
            $this->dbConfig = require "db/database_config.php";
    // Вот никак понять не могу, за что так любят этот mysqli, ну что в нем прям такого раз такого, по сравнению с PDO?
            $this->mysqli = mysqli_connect($this->dbConfig['host'], $this->dbConfig['username'], $this->dbConfig['password'], $this->dbConfig['db_name']);
    // Почему вдруг класс по работе с БД занимается операцией вывода?
    // Если что-то не так - бросайте исключение, ни каких echo, die, exit, trigger_error
            if (mysqli_connect_errno($this->mysqli)) {
                echo "Не удалось подключиться к MySQL: " . mysqli_connect_error();
            }
        }
    // Вы не проверяете аргументы, это плохо, очень.
    // Что бы нагнуть ваш проект достаточно передать в любой из аргументов: '1; DROP TABLE employees;'
      public function getEmployees($where='1',$start, $perPage){
    // ЗАБУДЬТЕ про подстановку данных через конкатенацию, используйте плейсхолдеры
    // http://php.net/manual/ru/pdo.prepared-statements.php
            $sql="SELECT e.name,e.birthday,d.title_dep,p.title_pos,t.title_type,e.salary FROM `employees` AS e INNER JOIN departments AS d ON e.id_dep=d.id
    INNER JOIN positions AS p ON e.id_pos=p.id
    INNER JOIN payment_types AS t ON e.id_type=t.id  where $where LIMIT $start,$perPage";
    
    // Вам ни переменная $res, ни $row не нужны
            $res = $this->mysqli->query($sql);
            $row=$res->fetch_all(MYSQLI_ASSOC);
            return $row;
        }
    }
    Ответ написан
    2 комментария
  • Есть ли хорошая библиотека или интеграция с ПС для живого поиска по большой БД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Подобные штуки работают быстро как раз потому, что используется не бд, а кэш с уже ранее веденными фразами.

    Можете покурить ElasticSearch, при тонкой настройке индексов сможете выжать не малую производительность.
    Ответ написан
    Комментировать
  • Онлайн ритейл. Какую рекомендуете CMS и СУБД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Как решить технические проблемы, которые у вас могут возникнуть в несуществующем программном комплексе?))
    Да никак, технические проблемы решаются по мере их выявления.
    Ответ написан
    4 комментария
  • Какую БД лучше подходит для хранения данных от датчиков?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотрите в сторону: statsd -> graphite, или statsd -> influxdb
    Ответ написан
    Комментировать
  • Какую технологию выбрать веб сервиса и БД?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Под БД можете Elastic заюзать. Забивать адреса можно в полу автоматическом режиме: если адрес стандартный
    (ул|пр-т|пр|...). (Адрес улицы/проспекта/...), д. (буквы/цыфры), кв. (буквы/цыфры) - разбивать регуляркой, и вбивать автоматически, в противном случае в ручную.

    Есть альтернативный вариант - пытаться искать адрес через гугл, далее пытаться получить адрес через его API
    Ответ написан
    Комментировать
  • Кто знает замену MongoDB?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    А если у каждого пользователя свои посты? Все посты пихать в одну коллекцию или в один массив?

    Почему же? Посты в одной коллекции - это вполне ок. Юзвери в другой коллекции это тоже ок.

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

    Не пишите костыль на костыле, сначала спроектируйте БД так, что бы избежать этого.

    Вставлять документ в коллекцию можно только в конец.

    И в чем проблема (я вам по секрету: так происходит практически в каждой СУБД)? Какая вам разница, где оно будет вставляться? Делайте выборку с сортировкой.

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

    RTFM

    написать костыль со skip, limit.

    Какой нехороший человек вам такую дичь сказал? Если у вас записей 10кк, у вас просто оперативки не хватит делать подобные выборки без skip/limit.

    Если бы можно было всё вставлять в начало коллекции, было бы намного проще.

    Вы пытаетесь вырвать гланды через анус, причем другого человека.

    Подскажите, пожалуйста, кто знает лучшую альтернативу.

    Еще раз, вы придумали проблему и пытаетесь ее героически решить, но проблема заключается в том, что вы не правильно используете средства предлагаемые mongo, и другая БД вам ни как не поможет
    Ответ написан
    1 комментарий
  • Как скачать базу иного сайта?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Пффф, легко!

    Устраиваетесь на работу в primer.com, подписываете NDA об не разглашении, получаете доступ к БД.
    Сливаете себе копию БД, выплачиваете primer.com штраф за нарушение NDA, согласно договору, что вы подписали. Профит.
    Ответ написан
    1 комментарий
  • Как выбрать js CMS с файловой базой данных?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Welcome to NodeJS))
    www.sitepoint.com/exploring-different-cms-solution...

    хранением базы данных в файле.

    Обычно так никто не делает. Есть СУБД и вы с ней работаете, а не с файлом.
    Ответ написан
  • ORM or NotORM? Что лучше выбрать?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1 комментарий
  • Как "объединить" записи в таблицах в одну строку?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Читайте на тему: Строковые функции MySQL
    Ответ написан
    Комментировать
  • Как хранить номера банковских карт на сервере?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Храните хэш номера карты + в случае необходимости последние 4 цифры для целей пользовательской идентификации. Более вам ничего не нужно
    Ответ написан
    2 комментария
  • Как спроектировать базу данных сайта знакомств на MySQL?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. ENUM вообще говоря довольно большая штука 65535 вариантов. Но все же рекомендую делать через нормализацию, вам это словарь может еще пригодится где-то.
    2. Ключами стоит делать то, по чем вы будете искать. В случае, если данные в конце слабо отличаются, а основные изменения в начале - имеет смысл ограничить индекс по размеру (ВНИМАНИЕ ТОЛЬКО ДЛЯ ЭКОНОМИИ ПАМЯТИ). Например:
    abcd
    bacd
    dxdc
    aabd
    У приведенных строк на последнем символе разница не существенная, посему индекс можно ограничить 3-мя.
    3. Вот тут бабка на двое гадала, если у вас будет индекс на уникальность (НЕ primary), то множество NULL вы получить сможете, а вот множество "" - нет. NOT NULL рекомендую использовать в случае, если вы требуете обязательности заполнения данных.
    4. Конечно MEMORY! Всего один сбой в ДЦ и у вас появится работы на еще пол года, это же замечательно)) В памяти можно хранить только то, что вы согласны в любой момент потерять.
    Если по хорошему - memory таблицы во первых имеют кучу ограничений, во вторых - проигрывают k-v хранилищам типа memcached/redis по скорости, в третьих не поддерживают вытеснения.

    PS: планируется высокое посещение сайта (десятки тысяч пользователей).

    За какой период?
    Если за сутки - это... не высокое посещение, вы даже foreign ключики позволить себе сможете.
    Если за минуту (и реально много данных) - вот это уже интересно, про FK забудьте, пересчет индексов будет слишком дорогим. Под поиск - смотрите в сторону кластера на elasticsearch, так же скорее всего потребуется кластер мемкэшей. БД дергать можно будет но по минимуму. Основная работа должна будет происходить в фоновом режиме, посему подберите сервер очередей типа rabbitmq, или что-то типа того.
    Ответ написан
    Комментировать