
Ilia
23.08.2017
11:19:01
И?
Мы какую сейчас задачу решаем? Вставить запись только если её нет или что ?

Павел
23.08.2017
11:20:00
это не верно. я наверно сильно затуманил всем голову - но думаю может из этой ситуации лучше через транзакцию выкрутится ?
да, все верно, вставить запись если ее нет, но при этом предваритьельно проверить базу на существование такой же записи но под другим id - который уникальный и праймари

Google

Ilia
23.08.2017
11:23:37

Павел
23.08.2017
11:27:43
о - вот это гуд идея - спасибо я про это не подумал!

Ilia
23.08.2017
11:34:11
Как бы предыдущий мой совет без этого всё равно не работал бы...

Павел
23.08.2017
13:19:03
Как бы предыдущий мой совет без этого всё равно не работал бы...
Спс все получилось - даже 2-й кюч не пришлось задействовать - только 1 - вот сам кверик : insert into areas (com_port, phone, area, acct, acct_counter, data_incoming, time_incoming)
SELECT 'COM4', '+99999999999', '12', '143848', '1050', '2017-07-26', '07:50:45' FROM areas
WHERE NOT EXISTS (SELECT * FROM areas
WHERE com_port = 'COM4' AND phone = '+99999999999' AND area = '12'
AND acct = '143848' AND acct_counter = '1050' AND data_incoming = '2017-07-26'
AND time_incoming = '07:50:45' AND id != 0 )
LIMIT 1;

Константин
23.08.2017
14:06:19

Fike
23.08.2017
14:07:15
храните просто чейнджсеты в разных таблицах и не допускайте того, чтобы два проекта пытались заменеджить один и тот же объект
если вы, грубо говоря, в проекте 2 видите, что в проекте DB вам не хватает полей, то это на самом деле значит, что проект DB должен их объявить, а проект 2 - дождаться

Константин
23.08.2017
14:11:44
дело не в конфликте мержей.
я скорее сумбурно объяснил
конфликта нет, все работает, но нужно откатить состояние (liquibase, не vcs)
можно ли как-то централизовано откатить до какого-то состояния
?

Google

Fike
23.08.2017
14:13:45
обычный роллбэк

Константин
23.08.2017
14:19:51
понял, спасибо

Alex
23.08.2017
15:52:57
Товарищи, такой вопрос по монге.
Можно юзеров привязать к реквестам в одной коллекции:
{
'login': blah,
'email': bar,
'password': foo,
requests: [
{
'payload': foobar,
'document_id': baz
}
]
}
А можно хранить референс на юзера в отдельной коллекции реквестов:
{
'login': blah,
'email': bar,
'password': foo
}
---
{
'user_login': blah,
'payload': foobar,
'document_id': baz
}
Первый железно удостоверяет, что реквест без юзера существовать не может.
Второй выглядит как SQL-way, но чуть поаккуратнее первого.
Как будет Mongo-way?

Fike
23.08.2017
15:57:26
а как он у вас появится без юзера?
и что вы будете делать, когда запросов у одного пользователя наберется больше, чем на предел размера документа?

Alex
23.08.2017
15:58:36

Fike
23.08.2017
15:59:11

Alex
23.08.2017
15:59:43
Но если всунуть его внутрь, то и в базе он без юзера не сможет появиться.

Fike
23.08.2017
15:59:52
Ага, а как он вообще у вас может появиться без юзера при альтернативной обработке?

Alex
23.08.2017
16:00:25

Fike
23.08.2017
16:00:39
В смысле не вытаскивать перед этим пользователя из базы
Точнее даже не так
если мы поменяем функцию
persist(id, request) {
db.getUser(id).requests.push(request)
}
на
persist(id, request) {
request.user = id
db.requests.push(request)
То каким образом может получиться ситуация, в которой айдишник не принадлежит какому-то юзеру?
сейчас просто моделируется ситуация "прилетит космический луч и нарисует айдишник из воздуха"

Alex
23.08.2017
16:04:02
Нууу... если кто-то будет юзать код не по докам и создавать реквест через встроенный init питона.

Fike
23.08.2017
16:04:24
с тем же успехом он может получить прямое поджключение к базе и напихать вам вообще чего угодно

Alex
23.08.2017
16:04:35

Fike
23.08.2017
16:09:09
Ее не будет. Null (None) там где не нужно нарисоваться может, но скорее это будет простой недосмотр в коде и защищаться от него надо валидацией перед сохранением, а не разухабливая записи на килобайты.

Alex
23.08.2017
16:09:43
Ок, спасибо!

Google

Dmitry
24.08.2017
06:02:44
всем привет. может подскажите что.. 2 сервера, freebsd 9 и11, mysql 5.5 и 5.6 соответственно, базы одинаковые, конфиг мускула - одинаковый. но один и тот же запрос с like на 5.5 занимает 0002 секунды, а на 5.6- 2-3 секунды

Vladislav
24.08.2017
06:06:45

Dmitry
24.08.2017
06:07:13
пример?
сорри, фс и версии ос? в нем?

Vladislav
24.08.2017
06:08:34
И даже в железе

Dmitry
24.08.2017
06:11:16
хм.. затык то только в LIKE.. и серьезных нагрузок нет..

Vladislav
24.08.2017
06:24:29
Но ответ все равно там
Сравниваете же полностью разные системы

Dmitry
24.08.2017
06:28:44
спасибо, потестим. может откачусь на 5.5

lost
24.08.2017
08:02:11
Оно как раз в 5.6 появилось

Dmitry
24.08.2017
08:07:56
Спасибо, гляну

Ilia
24.08.2017
09:03:42
всем привет. может подскажите что.. 2 сервера, freebsd 9 и11, mysql 5.5 и 5.6 соответственно, базы одинаковые, конфиг мускула - одинаковый. но один и тот же запрос с like на 5.5 занимает 0002 секунды, а на 5.6- 2-3 секунды
Дмитрий, посмотри планы запросов хотя бы.
Потом, то, что у запросов разные времена выполнения, не говорит ни о чём. Секундой больше, секундой меньше — не показатель

Dmitry
24.08.2017
09:14:59
2 идентичные базы по всему - объем данных, типы таблиц.. Основное отличие- ос, фс и версия mysql. И разница не в секунду, а на несколько порядков. 0.002 против 2.

Admin
ERROR: S client not available

Dmitry
24.08.2017
09:16:46
Если такой же запрос, но без like-все отлично, но like необходим

Ilia
24.08.2017
09:29:16
Смотри планы на обоих машинах.
Сравнивай DDL таблиц
Но даже при этом у тебя разные могут планы и запросы по-разному работать — версии MySQL у тебя разные.

Fike
24.08.2017
09:47:34
эксплейн-то сравните/покажите

Google

Ilia
24.08.2017
09:47:53
Не покажет, он же гордый!

Fike
24.08.2017
09:48:21
больше всего на свете на свою реплику я хотел получить заправскую шутейку

Dmitry
24.08.2017
10:01:35
Не могу сейчас показать, в пн, не раньше..
Короче кругом виновен, извиняюсь, что, задав вопрос, не смог показать полную картину. Не стебусь -
Сам все понимаю

Ilia
24.08.2017
10:34:33
Дмитрий, на самом деле нам там смотреть особо и не на что, это для тебя.
Посмотри планы запросов там и там, посмотри, чем план на "плохом" отличается от "хорошего", попытайся понять, почему.
Если поймёшь сам, там индекса нет или что — хорошо.
Если планы одинаковые — значит, что-то совсем не так в "плохом" с конфигурацией, либо просто случайный эффект (например, кэш данных не был заполнен)
Если планы разные и непонятно почему — вот тогда можешь показывать и плакаться.

lost
24.08.2017
10:40:10
мне всегда нравилась политика mysql с новыми фичами
они все включают по-умолчанию

Dmitry
24.08.2017
10:41:05
План это explain?

lost
24.08.2017
10:41:11
да

Dmitry
24.08.2017
10:43:40
С ходу не вспомню, сравню,

lost
24.08.2017
10:44:34
если не разберешься:
присылай планы, ddl таблицы и вывод
SELECT @@optimizer_switch;

Ilia
24.08.2017
10:47:28
DDL всех таблиц на двух серверах!
И лучше не присылать, а на pastebin...

Dmitry
24.08.2017
10:51:11
Да на gist положу, не проблема

Stas
24.08.2017
16:35:30

Vladislav
24.08.2017
18:23:35
Кто все эти люди? ?

Pavel
24.08.2017
18:24:10
Это не люди, это либо хры, либо боты. Не знаю, что хуже.