1

Тема: "исключить конфликты"

Доброго времени суток! У меня возникла очень интересная ситуация, мне в бд нужно записывать данные, котрые в свою очередь со стороны php подвергаются довольно сложной обработки

  • получили запрос

  • проверили запрос в базу с целью узнать "уместность" входящих данных

  • выполняем сложные операции рекурсивного перебора БД (т.к. не MYSQL не поддерживает рекурсивные запросы приходится делать по одному) нахожу точку "отсчёта"

  • выполняю другой рекурсивный алгоритм вычисляющий необходимые данные

  • записываю в специальную таблицу(control) данные о резервировании "места" под запись

  • проверяю не зарезервировано ли это "место" другой записью...

  • выполняю изменение записи основной таблицы(master)

  • перепроверяю данные (master) относительно записей в (control)

  • если конечная проверка не прошла выполняю функцию "ремонта" конфликтов

Верно ли поставлен алгоритм?
основная задача, чтобы между 5 и 6 не было разногласий, ведь на сайте могут возникать ситуации, когда единовременно на одно "место" претендуют несколько записей... может возникнуть ситуация с перезаписью верного значения, либо добавлением уже фиктивной записи... планируется очень большой поток данных...

Thumbs up Thumbs down

2

Re: "исключить конфликты"

По алгоритму - как будто все правильно. Хотя мне немного сложно оценить такого рода алгоритм без точного видения задачи.

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

https://github.com/imagecms/ImageCMS - ночные сборки корпорейта
https://scrutinizer-ci.com/g/imagecms/ImageCMS/badges/quality-score.png?b=development https://codeclimate.com/github/imagecms/ImageCMS/badges/gpa.svg

Thumbs up +1 Thumbs down

3

Re: "исключить конфликты"

да, вот по этому и хочу максимально предусмотреть любые ошибки... т.к. в базе (master) одна запись должна иметь строкий порядок данных приличного объема... но на данный момент, пока писал вопрос, 2 последних пункта добавляют работенки коду ровно в 2 раза, и вроде как должны убивать все фиктивные записи... т.к. в control хранится хронология абсолютно всех попыток

Thumbs up Thumbs down

4

Re: "исключить конфликты"

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

Thumbs up Thumbs down

5

Re: "исключить конфликты"

ясненько буду знать

Thumbs up Thumbs down