1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bombyu-Recharge_Platform

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
充值平台实时统计分析实现思路.txt 7.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 08.06.2025 18:49 61838f7
1. Пополнение счета
1. Общая ситуация
1. Статистика по всему сети по количеству заказов пополнения, сумме пополнений и количеству успешных пополнений
2. Временная статистика по обработке заказов пополнения, основная статистика по количеству заказов
Реализация:
1. Для каждого пакета (после преобразования в RDD) данных выполняются следующие действия: каждая запись имеет формат JSON, поэтому её преобразуют в JSON-строку и извлекают все необходимые поля для уведомления о пополнении
2. Отфильтровать записи, где имя сервиса (serviceName) равно "reChargeNotifyReq"; возвращаемый RDD может быть в формате кортежа или строки, в зависимости от предпочтений
3. Полученный RDD содержит данные для обработки в данном пакете (filtered); данные можно кэшировать, так как анализ уведомлений о пополнении основан на этих данных
4. Выполняется статистический анализ filtered с использованием foreachPartition (более эффективный метод, не требует возврата значений)
5. 1. Сначала извлекаются данные из Redis: количество заказов пополнения, сумма пополнений и количество успешных пополнений; если данные отсутствуют, они устанавливаются равными нулю (реальное время статистики вставляется в Redis)
5. 2.Из Redis извлекаются данные по ключу, представляющему текущий час; если данные существуют, они разделяются по символу "_" и извлекаются соответствующие значения; если данные отсутствуют, они устанавливаются равными нулю.
6. 1. Производится обработка каждого раздела данных, статистический анализ выполняется для каждого заказа пополнения, суммы пополнений и количества успешных пополнений, данные объединяются с данными, извлеченными из Redis.
6. 2. Временная статистика по обработке заказов пополнения, где ключом является время (точно до часа), а значением — строка в формате "количество заказов пополнения_сумма пополнений_количество успешных пополнений_успешность пополнения".
7. После завершения обработки каждого раздела, новые данные записываются в Redis, заменяя старые значения (обеспечивая актуальность данных).
2. Качество обслуживания
1. Распределение неудачных пополнений по всем провинциям, статистика по количеству неудачных пополнений по каждому часу для каждой провинции.
Реализация:
1. Выполняется статистический анализ filtered, отфильтровываются неудачные пополнения.
2. Строка "провинция_дата_час" используется как ключ, значение равно 1; выполняется агрегация данных, чтобы получить все неудачные данные для данного пакета.
3.Производится обход RDD, для каждого ключа извлекаются данные из базы данных, суммируются с данными текущего пакета, и обновляются данные в базе данных.
3. Топ-10 провинций по заказам пополнения
1. Статистика по количеству заказов пополнения для топ-10 провинций, а также статистика по успешности пополнений для каждой провинции, округленная до одного знака после запятой
Реализация:
1. Сначала извлекаются данные из базы данных для каждой провинции, результат сохраняется в списке
val list: List[(String,(String,String))] = DB.readOnly { implicit session =>
SQL("select provinceCode,count,rstSuccess from province_count_top10")
.bind().map(rs => (rs.string("provinceCode"),(rs.string("count"),rs.string("rstSuccess"))))).list().apply()
2. Проверить, есть ли данные в списке. Если данных нет (при первом запуске программы), сгенерировать RDD в формате (провинция("0","0")) на основе информации о провинции. Если данные есть, преобразовать их в RDD.
3. Выполнить операцию filtered, агрегировать данные по ключу (провинция, (количество успешных заказов, общее количество заказов)).
4. Выполнить join двух данных, пройтись по объединенному RDD, объединить результаты из базы данных с результатами текущей партии и рассчитать процент успешности.
5. Обновить результаты в базе данных (можно оптимизировать: если все данные текущей партии равны нулю, и программа не запускается в первый раз, обновление базы данных не требуется).6> Вернуть данные в формате (провинция, (количество успешных заказов, общее количество заказов)), создать новый RDD.
7> Использовать общее количество заказов из нового RDD как поле для сортировки, выбрать Top 10 и вернуть массив.
8> Обновить массив в базе данных (можно установить первичный ключ для ранжирования в таблице Top 10).
4. Реальное время пополнения
1> Для отфильтрованных данных выполнить агрегацию по ключу "yyyyMMdd_HH" с значением (1, сумма пополнений) и создать RDD.
2> Пройтись по RDD, найти записи с соответствующим ключом в базе данных, сложить их с записями RDD и обновить в базе данных.
```

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/bombyu-Recharge_Platform.git
git@api.gitlife.ru:oschina-mirror/bombyu-Recharge_Platform.git
oschina-mirror
bombyu-Recharge_Platform
bombyu-Recharge_Platform
master