Xrpl -py API - уменьшить скорость поиска данных или извлечь большие партии данныхPython

Программы на Python
Ответить
Anonymous
 Xrpl -py API - уменьшить скорость поиска данных или извлечь большие партии данных

Сообщение Anonymous »

Я работаю над приложением для получения данных об учетной записи и балансе из основной сети XRPL с использованием API XRPL-py, не зная заранее информацию об учетной записи (кошельке).
Вот ссылка на документация по API XRPL-py: API XRPL-py
XRPL использует нумерацию страниц с помощью маркера, поэтому конструкция представляет собой сериализованный конвейер, требующий выборки пакета данных перед следующим пакетом данных. данные могут быть извлекаются (если меня не дезинформировали?).
Моему скрипту в среднем требуется от 1 до 1,5 секунд для получения и обработки данных за один раз, и поскольку в настоящее время существует ~ 5 миллионов учетных записей ( кошельков) и растет каждый день, для получения всех данных потребуется примерно 8 часов (при условии отсутствия ошибок выборки), длина которых со временем будет только увеличиваться по мере роста количества учетных записей с массовым внедрением.
Наконец, поскольку состояние учетных записей меняется, я хочу часто повторно получать все данные, в идеале один раз в день (если это возможно), но, учитывая 8 часов, которые в настоящее время это занимает, я полагаю, я мог бы жить с раз в неделю, но это очень вероятно станет проблемой, когда объем данных станет намного больше.
Мой вопрос: существует ли более эффективный способ получить данные, которые мне нужны, из XRPL, или моя цель практически невыполнима?< /p>
Вот мой код:
from xrpl.clients import JsonRpcClient
from xrpl.models.requests import LedgerData
import time

# Connect to the XRPL mainnet
client = JsonRpcClient("https://s1.ripple.com:51234")

# Function to fetch data
def fetch_page(marker=None):
ledger_data = LedgerData(
ledger_index=latest_ledger,
binary=False,
marker=marker
)
response = client.request(ledger_data)
if not response.is_successful():
raise ValueError("Failed to fetch ledger data.")
else:
return response.result['state'], response.result.get('marker')

# Function to process data
def process_data(data,accounts):
for obj in data:
if obj['LedgerEntryType'] == 'AccountRoot':
accounts.append({'address': obj['Account'],
'balance': int(obj['Balance']) / 1000000 # Convert drops to number of coins
})
return accounts

latest_ledger = client.request(LedgerData(ledger_index="validated")).result['ledger_index']

accounts = []

while True:
current_marker = None
loop_start_time = time.time() # Start timing

# Fetch data
state, current_marker = fetch_page(current_marker)

# Process data
accounts = process_data(state,accounts)

loop_end_time = time.time() # Start timing
loop_time_elapsed = loop_end_time - loop_start_time

print(f"Total time for pagination call/processing: {loop_time_elapsed:.3f} seconds")

if not current_marker: # No more pages
break
< /code>
Пример вывода. Запуск Script: < /p>
Total time for pagination call/processing: 0.537 seconds
Total time for pagination call/processing: 0.552 seconds
Total time for pagination call/processing: 0.549 seconds
Total time for pagination call/processing: 0.564 seconds
Total time for pagination call/processing: 0.538 seconds
Total time for pagination call/processing: 1.691 seconds
Total time for pagination call/processing: 1.313 seconds
Total time for pagination call/processing: 1.325 seconds
Total time for pagination call/processing: 1.025 seconds
Total time for pagination call/processing: 1.018 seconds
Total time for pagination call/processing: 1.054 seconds
Total time for pagination call/processing: 1.013 seconds
Total time for pagination call/processing: 1.014 seconds
Total time for pagination call/processing: 1.024 seconds
Total time for pagination call/processing: 1.025 seconds
Total time for pagination call/processing: 1.406 seconds
Total time for pagination call/processing: 1.038 seconds
Total time for pagination call/processing: 1.049 seconds
Total time for pagination call/processing: 1.300 seconds
Total time for pagination call/processing: 1.046 seconds
Total time for pagination call/processing: 0.918 seconds
Total time for pagination call/processing: 1.230 seconds
Total time for pagination call/processing: 1.019 seconds
Total time for pagination call/processing: 1.023 seconds
Total time for pagination call/processing: 1.022 seconds
Total time for pagination call/processing: 1.238 seconds
Total time for pagination call/processing: 1.015 seconds
Total time for pagination call/processing: 1.037 seconds
Total time for pagination call/processing: 1.131 seconds
Total time for pagination call/processing: 1.020 seconds
Total time for pagination call/processing: 1.211 seconds
Total time for pagination call/processing: 1.035 seconds
Total time for pagination call/processing: 1.030 seconds
Total time for pagination call/processing: 1.028 seconds


Подробнее здесь: https://stackoverflow.com/questions/793 ... es-of-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»