Какова лучшая стратегия retainment больших наборов данных?

Единственный способ, которым вы должны получать значения «из» наблюдаемого / субъекта, подписаться!

Если вы используете getValue(), вы делаете что-то императив в декларативной парадигме. Он находится в качестве выходного люка, но 99,9% времени вы НЕ должны использовать getValue(). Есть несколько интересных вещей, которые сделают getValue(): он выдает ошибку, если объект был отписано, это не позволит вам получить значение, если объект мертв, потому что он ошибочен и т. Д. Но, опять же, он там в качестве выходного люка для редких обстоятельств.

Существует несколько способов получить последнее значение от объекта или наблюдаемого по методу «Rx-y»:

  1. Используя BehaviorSubject: Но фактически подписывается на него . Когда вы впервые подписываетесь на BehaviorSubject, он будет синхронно отправлять предыдущее значение, полученное или инициализированное с помощью.
  2. Использование ReplaySubject(N): это будет кешировать N значения и воспроизводить их для новых подписчиков.
  3. A.withLatestFrom(B): Используйте этот оператор, чтобы получить последнее значение от наблюдаемого B, когда наблюдается наблюдаемое A. Дает вам оба значения в массиве [a, b].
  4. A.combineLatest(B): Используйте этот оператор, чтобы получать самые последние значения из A и B каждый раз, когда A или B излучает. Дает вам оба значения в массиве.
  5. shareReplay(): Делает наблюдаемую многоадресную передачу через ReplaySubject, но позволяет повторить наблюдаемую при ошибке. (В основном это дает вам такое поведение кэширования с обещанием).
  6. publishReplay(), publishBehavior(initialValue), multicast(subject: BehaviorSubject | ReplaySubject) и т. Д. Другие операторы, которые используют BehaviorSubject и ReplaySubject. Разные вкусы одного и того же, они в основном многоадресный источник, наблюдаемый путем перенаправления всех уведомлений через предмет. Вы должны позвонить connect(), чтобы подписаться на источник с объектом.
9
задан Brian Tompsett - 汤莱恩 19 October 2015 в 10:15
поделиться

5 ответов

Мы используем оба метода на моей работе, но немного отличающийся, мы сохраняем все данные о сбыте в первичной таблице в течение 30 дней, затем ночью (часть ночных заданий), дневные продажи свертываются в сводки (n количество x продукта, проданного сегодня ect) в отдельной таблице для создания отчетов о причинах, и продажи, более чем 30 дней заархивированы в другую базу данных, затем один раз в год (мы идем на финансовые годы) новая архивная база данных запускаются. не точно прекрасный, но..

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

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

4
ответ дан 4 December 2019 в 15:30
поделиться

При использовании SQL-сервера 2005 это может быть хорошим кандидатом на использование разделенных таблиц.

4
ответ дан 4 December 2019 в 15:30
поделиться

@Jason - Я не вижу, как хранение данных в простых текстовых файлах позволит Вам делать длительный срок, отклоняясь анализ легко данных.

@Jason - Я предполагаю, что моя точка - то, что, если какой-либо вид специального анализа (т.е. отклоняющийся) должен быть сделан на данных деловыми людьми, свернувшись или архивируя данные к текстовым файлам действительно, не решает проблем. Конечно, написание кода для потребления текстового файла легко на многих языках, но та проблема была решена. Кроме того, я утверждал бы, что сегодняшний RDBMS все чрезвычайно длителен когда установка и сохраняемый правильно. Если бы они не были то, почему Вы выполнили бы бизнес сверху одного (уже не говоря о данных архива к нему)? Я просто не вижу точку архивации в файл простого текста из-за заявления, что длительность текстовых файлов превосходит длительность баз данных.

2
ответ дан 4 December 2019 в 15:30
поделиться

В зависимости от ограничений как бюджет, и т.д., это походит на идеального кандидата на приложение хранилищ данных. Это обычно представляло бы новый сервер для использования в качестве хранилища данных. SQL Server 2005 поддерживает большое это действие из поля, далее Вы смогли использовать дополнительные сервисы SQL Server (например, Analysis Services, Reporting Services), чтобы предоставить дополнительное значение Вашим пользователям. (см. http://www.microsoft.com/technet/prodtechnol/sql/2005/dwsqlsy.mspx),

2
ответ дан 4 December 2019 в 15:30
поделиться

Любая из тех опций превосходна, но она действительно зависит от проблемной области. Для вещей как остатки наличных средств или статистические данные, я думаю, что свертывание записей и консолидация их являются лучшим способом, можно затем переместить свернутые записи в параллельную архивную таблицу, включив их таким способом, которым можно "развернуть" при необходимости. Это содержит Вашу таблицу первичных данных в чистоте и быстрый, но позволяет Вам сохранять дополнительные данные для аудита или что бы то ни было. Ключевой вопрос, как Вы реализуете процесс "свертки". Или автоматически, через триггер или серверный процесс, или вмешательством пользователя на прикладном уровне?

1
ответ дан 4 December 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: