Сергей Рогожкин: Почему Вы так думаете? Я более чем уверен, что у нас были реплики некоторых микросервисов, семантическое версионирование микросервисов, балансировка нагрузки на микросервисы, пачка процессов и т.д.
Буду рад выслушать Вашу точку зрения и описание микросервисного приложения... и укажите пожалуйста пункы в которых я ошибся.
Отладка занимала много времени, согласен, но я замечал это и в других проектах, написанных на микросервисах. Увы это в определенном смысле проблема и довольно трудоемкая.
Yeah: В рамках схемы foreign keys/primary keys без проблем, они есть и работают хорошо. В рамках нескольких схем foreign keys/primary keys не работали (и они не требоались в принципе).
Проектирование БД позволяло не завязиваться на другие схемы, если правильно выбраны сущности и взаиможействие между ними в рамках одной схемы, то все будет ок. Было такое правило, что взаиможействие между схемами БД запрещено в принципе и каралось.
Проблема с UserId -- часто был такой столбец в таблицах в других схемах (другие столбцы реже), который не имел связи с таблицей Users, но проблем с отсутствием foreign keys не было. Проблем с целостностью данных тоже не замечал (они вероятно были, но социальная сеть, не банковское приложение или запуск ракет, все зависит от того, что вам требуется и что Вы можете себе позволить, а что нет).
littleguga: Я затрудняюсь ответить т.к. я пришел на проект которому уже было более 3х лет. Точнее там было больше 5 проектов, написанных на микросервисах и они шарили между собой некоторые из микросервисов. Проекты иногда закрывали, иногда открывали новые. Что мне кажется важно в отношении новых проектов: просто рисовали новый UI и создавали новый проект в CI, накидывали в него список микросервисов из уже имеющихся и за месяц!!! работы был готов новый проект с понятным всем разработчиком функционалом и стеком технологий)))
RabbitMQ добольно распространен и его часто используют, новые проекты на нем пишут, думаю он подходит для определенных задач. Из личного опыта могу сказать, что с ним удобно работать, у него есть хорошая админка, он понятен и удобен. У RabbitMQ сообщения из очереди могут быть записаны на диск, например если какой-то микросервис не работает несколько часов, то сообщения в очереди будут накапливаться и могут быть обработаны через час или два после отправки, что довольно удобно в некоторых ситуациях.
komarevtsev: я не работал с redis pub/sub, вполне может быть, что это хорошая альтернатива RabbitMQ. В микросервисе я пользовался только только несколькими функциями: [1] получить сообщение из очереди и обработать его; [2] отправить сообщение сообщение в очередь на обработку, важно, что для некоторых сообщений требовалось получить ответ о том, что оно обработалось удачно/неудачно в другом микросервисе (это в rabbitmq реализованно из коробки и очень удобно), цепочка взаиможействия микровервисов может быть просто огромной (что сильно затрудняло работу на первых этапах)
Алексей Немиро:
1) про модель восстановления знаю, отправил заказчику запрос
2) спасибо за инфу про shrink, подумаю как это использовать
3) так же знаю, что SQL server создает статистику в таблицах, как это отключить для конкретной таблицы (пробовал но не получилось, может есть какие-то особенности или еще что-то, что пропустил)
4) что еще может заставить сервер тупить, если я делаю только bulk insert, create index и delete?
Дмитрий Ковальский: скрипт не покажу, его нету на том уровне, что я использую, копирование данных в БД. Использую .net SqlBulkCopy.WtiteToServer() из одной таблицы БД в другую таблицу той же БД без преобразований, по 8000 строк за раз.
Пробовал сделать такой скрипт:
WITH {cteTableName} AS (
SELECT {selectedColumns}, ROW_NUMBER() OVER(PARTITION BY {uniqueColumnName} ORDER BY {uniqueColumnName}) AS RowNumber
FROM {source})
INSERT INTO {target}({selectedColumns})
SELECT {selectedColumns}
FROM {cteTableName}
WHERE RowNumber = 1;
(без индекса) это падает по таймауту и выглядит так, будто сервер просто не доступен/не отвечает/занят своими внутренними делами, т.к. 3600 секунд есть на подключение и на выполнение команды, а падает через минуту или 2 и рандомно на разных шагах выполнение
SaNNy32: это не глупо, это такая архитектура БД (возможно кривовата, возможно требования прикладной части, а скорее всего оба пункта) и невозможность её изменить. БД с данными и их там миллионы строк, за один цикл обработки стандартного пакета данных только в одну таблицу из 50 вставляется около 243 000 строк.
Индексировать не вариант т.к. исходная таблица без индексов и должна такой остаться, если пересоздавать индексы при каждой обработке данных -- время этой операции будет увеличиваться с каждым циклом обработки данных, транзакции использовать запрещено
Пропатчить не вариант т.к. доступа к проекту бд нету, да и накажут меня за это больно, создать свои временные pk не получится т.к. не уверен в консистентности данных (может дубликаты кто-то другой вставил уже), индексы временно вставлять в основные таблицы тоже не вариант т..к. при построении блокируют таблицу/бд пока строятся
Потому что заказчик. Извиняюсь за тупой ответ, но увы -- заказчик использует много разных бд для хранения и обработки данных на разных этапах работы системы и это самая первая из них, туда просто вливаются данные как есть, но обязательно без дубликатов, потом он их забирает в другую бд (и, думаю, там уже начинаются ключи, индексы, один комоним и т.д.)
Сергей: защита от снимка экрана возможна (видел в приложении как привентиться - черная картинка вместо снимка)
Защититься от видео или чего-то подобного (на сколько я понял - отдельным девайсом пишется видео с экраном приложения) является проблемой с которой тяжело разобраться или почти невозможно (
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.