Nano Hash - криптовалюты, майнинг, программирование

Приращение SQL между диапазоном без дубликатов - многопоточность

Я постараюсь предоставить как можно больше подробностей об этом. Каков наилучший способ увеличить диапазон чисел в среде с высоким уровнем транзакций, то есть вызовы поступают очень быстро из веб-API?

Первая таблица, которая у меня есть, — это основная таблица диапазонов, доступных для использования. Это отмечено ниже. Я не уверен, что это лучший способ реализовать это, поэтому я открыт для предложений

Компания А первоначально дала мне диапазон 100-200. Со временем у нас стало заканчиваться, поэтому нам дали новый ассортимент. Новый диапазон 201-300.

Company   Range    Inactive
   A      100-200      X
   B      100-200
   C      200-350
   A      201-300  

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

 Company  Number    DateUsed
   A      198       2017-11-30
   B      199       2017-11-30
   A      200       2017-11-30
   B      105       2017-11-30
   C      215       2017-11-30
   A      201       2017-11-30

Как только диапазон израсходован, мне нужно иметь возможность пометить этот диапазон, чтобы он больше не использовался, и использовать следующий доступный диапазон. Я думал добавить номер «Последний использованный» в первую таблицу и выполнить оператор обновления с выводом с оператором case в неактивном состоянии, помечая его как неактивный, если он пуст.

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


  • Можете ли вы разбить столбец диапазона на два столбца? Например, RangeLow и RangeHigh. Если это так, то это облегчило бы эту проблему. Это также сделало бы вашу таблицу более атомарной, что является ключевой особенностью правильной структуризации реляционной базы данных. 01.12.2017
  • Да, разделить диапазон не составит труда. Вот как бы я сделал это обычно. Это был просто пример. 01.12.2017

Ответы:


1

Наличие неактивного флага в первой таблице кажется мне совершенно нормальным. Я написал и протестировал запрос, который обновит ваш флаг, при условии, что столбец диапазона разделен на столбец нижнего диапазона и столбец верхнего диапазона. Я называю таблицы Ranges и RangeLog соответственно.

UPDATE Ranges
SET Inactive = 'X'
WHERE EXISTS (SELECT tA.Company, RangeLow, RangeHigh, COUNT(*)
              FROM Ranges tA INNER JOIN (SELECT DISTINCT Company, Number 
                                         FROM RangeLog) tB ON tA.Company = tB.Company AND (Number BETWEEN tA.RangeLow AND tA.RangeHigh)
              GROUP BY tA.Company, RangeLow, RangeHigh
              HAVING RangeHigh - RangeLow + 1 = COUNT(*)
                     AND Ranges.Company = tA.Company AND Ranges.RangeLow = tA.RangeLow AND Ranges.RangeHigh = tA.RangeHigh)

Очевидно, что это не будет работать со схемой в том виде, в котором она у вас есть сейчас, но разделение на столбец поиска Range делает данные более атомарными и удобными, а также упрощает написание запросов. И это довольно незначительная модификация вашего стола.

Дайте нам знать, как это выглядит для вас!

30.11.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..