All streams
Search
Write a publication
Pull to refresh
5
0

Пользователь

Send message
Можно в микросервисы вынести части которые не требуют ACID — отчеты там и отображения, куча всего связанного с UI, логами и т.п.
Вытащить отдельно кучу интеграций — когда надо данные залить в систему извне или вылить наружу.
Монолит прилично урежется, останется один (ну или небольшое количество если удачно поделите) большой сервис который транзакционный.
Будет пачка микро и один макро сервис уже позитив. Время деплоя меньше, части менее зависимы. Хотя оркестрация тоже геморрой.
Я не автор, но могу описать некоторые из подходов.
1. разбить на шаги, каждый из которых это atomic message.
Начал проводить платеж, снял деньги с одного, записал состояние в очередь из которой два выхода — снял со второго и закомитил либо не получилось и сложил новое событие на возврат денег первому.
Этакий конечный автомат и по сути ручная многоступенчатая транзакция на бизнес логике. Иногда без этого никак если между шагами 1 и два есть например внешний сервис (допустим надо провести проверку на мошенничество, которая может занять время). А деньги снимаются, чтобы параллельный перевод не схватил.
2. логическое укрупнение сервисов, чтобы транзакция целиком проходила внутри сервиса.
Получается довольно редко, но иногда прокатывает если удается по бизнес логике.
3. распределенная транзакция.
Это может быть как двухфазный коммит (условно если разные базы) или передача transactionId как параметра.
Я обычно спрашиваю, что будет если в singleton scope bean завайрить session scope bean. И копать глубже как эта магия устроена.
Можно, но необязательно. В повых версиях спринг сам разберется. А вообще рекомендуют по возможности @Autowire на конструктор. Так меньше шансов что останется не инициализированными. Но в случае циклических зависимостей не прокатит.
Я нашел что со спринга 4.3 для единственного конструктора необязателен @Autowire. Был не прав.
@Controller
public class IndexController {

    final VisitsRepository visitsRepository;

    public IndexController(VisitsRepository visitsRepository) {
        this.visitsRepository = visitsRepository;
    }
...
}


Тут наверное @Autowire потерялся на конструкторе. Чтоб понятнее было.
Это не принципиально. Для реальной скорости надо использовать массивы, а не inner class.
Я знаю как ускорять java. Так написано чтобы было понятнее как работает алгоритм.
Памяти используется n/ln(n) — число простых. очевидно лучше n. Откуда вы взяли * 2 * log2(N)?
По операциям n log(log(n)) (n/2 + n/3 + n/5+… n/Pk… +)
По памяти это, как уже правильно заметили в комментах, n / ln(n) — по факту мы держим количество простых и для каждого из них последнее зачеркнутое.

BigInteger может быть. java выбрана потому как для меня более знакомый язык. Корректнее бы на С писать выжимая все возможное побитово.

Вероятностный мало. Надо доказывать что это простое, а проверок будет слишком много.

В общем компьютер должен работать, а человек думать. Буду думать дальше. Спасибо за коммент.
Да. Вы правы. По памяти n/ln(n),

Но насчет prime_count^2 нет.
для 2 мы сделаем не более n/2 сложений, для 3 — n/3 и т.д.
получаем n/2 + n/3 + n/5… то есть n * log log(n)

а если 2 выкинуть четные незачем проверять. И вот чуть ниже есть коммент что стартовать можно с candidate^2 и перепрыгивать при суммировании
if (p.lastCrossed < candidate) {
p.lastCrossed += p.prime * Math.round((candidate — p.lastCrossed) / p.prime());
}

то сложность поменьше будет. Хотя так сходу не могу прикинуть число. Буду думать.
Согласен. Уменьшим число операций сложения.
1. Где же там делители? попыток деления не происходит.
2. Если надо искать тысячебитовые числа куда их складывать?
Wheel factorization и т.п. по прежнему применимо при выборе следующего кандидата.
Цель же не найти первых 1000 или 100 млн. Цель показать идею алгоритма.
Есть Например тут http://primesieve.org/ очень эффективное решето. Цель не написать чтобы найти сколько то чисел. Цель скорее показать идею.
Да, это улучшение. Там еще много чего есть поулучшить. Я пытался просто идею показать…
Наверное candidate*2 в квадрате будет многовато.

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Registered
Activity