πŸ”₯Как быстро ΠΈ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с большими JSON-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

Π£Π·Π½Π°ΠΉΡ‚Π΅ Ρ‚Ρ€ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄Π°ΠΆΠ΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

1К ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΉ10К ΠΏΠΎΠΊΠ°Π·ΠΎΠ²
πŸ”₯Как быстро ΠΈ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с большими JSON-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ API ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь, ΠΈ ΠΏΠΎΠ΄Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ ΠΈΡ… число ΠΎΡ‚Π΄Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ JSON-массивов, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ Π»ΠΎΠ³ΠΈ Π±ΠΎΡ‚Π° ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡŽΠΌΠ΅ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² с ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΎΠΊ ΠΏΠΎ поиску Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π‘ нСбольшими Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.json ΡƒΡ‡Π°Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… курсах программирования, Π½ΠΎ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли объСм Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° становится Π½Π΅ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ большим? Или Π²Ρ‹ рСгулярно Β«ΡƒΠΏΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒΒ» Π² ошибки, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠΉ структурой элСмСнтов? Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌ вас с трСмя Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с большими JSON Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

Если Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ-Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ способы хранСния, знания JSON ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΠΆΠΈΡ‚ΡŒ здСсь.

Бпособ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ: ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ name ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ обновлСния:

			json_data = [
    {"id": 1, "name": "Item 1"},
    {"id": 2, "name": "Item 2"},    …
    {"id": 3, "name": "Item 3"}
]
		

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈΠ· Π½ΠΈΡ… добавляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ name прСфикс Test:

			async def update_json_array(json_data, api_base_url):
    async with aiohttp.ClientSession() as session:
        tasks = []
        for element in json_data:
            # ОбновляСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ name, добавляя "Test" Π² Π½Π°Ρ‡Π°Π»ΠΎ
            element['name'] = "Test " + element['name']
            
            # Π—Π΄Π΅ΡΡŒ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ URL Π±Π΅Π· ID, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ отправляСм POST-запрос
            tasks.append(update_element(session, api_base_url, element))
        
        # Π–Π΄Π΅ΠΌ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ всСх Π·Π°Π΄Π°Ρ‡
        results = await asyncio.gather(*tasks)
        return results
		

А вторая ΠΏΡƒΡˆΠΈΡ‚ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅:

			async def update_element(session, api_base_url, element):
    # ΠžΡ‚ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ POST запрос Π½Π° созданиС Π½ΠΎΠ²ΠΎΠ³ΠΎ рСсурса
    async with session.post(api_base_url, json=element) as response:
        # ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ Π² Π²ΠΈΠ΄Π΅ JSON
        return await response.json()
		

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ распараллСливаСм запуск этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ asyncio:

			import asyncio
import json

api_base_url = "http://example.com/api/items"

# Асинхронный Ρ†ΠΈΠΊΠ»
loop = asyncio.get_event_loop()
updated_results =  loop.run_until_complete(update_json_array(json_data, api_base_url))
		

Бпособ Π²Ρ‚ΠΎΡ€ΠΎΠΉ: пакСтная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π² binary

Π’ ΠΊΠΎΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ Hadoop ΠΈ Spark (для хранСния Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…) особоС ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π΅Π» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Parquet. Когда Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΌΠ°Ρ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, удобство Π΅Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€Π΅Π²Π°Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π°Π΄ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒΡŽ. Π—Π΄Π΅ΡΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ pandas ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π² Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ΅.

Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

			table = pa.Table.from_pandas(df)
		
  1. Β«Π—Π°ΠΌΠΎΡ€ΠΎΠ·ΠΈΡ‚Β» Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ссли Ρ„Π°ΠΉΠ» слишком большой;
  2. НС ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ массивы с ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΉΡΡ структурой.

А Π΄ΠΎ этого RAM Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ закончится Π½Π° шагС ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ JSON Π² Π΄Π°Ρ‚Π°Ρ„Ρ€Π΅ΠΉΠΌ.

Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ijson:

			import pyarrow as pa
import pyarrow.parquet as pq
import ijson

input_file = 'large_file.json'
output_file = 'output.parquet'

# Бписок для хранСния Π΄Π°Π½Π½Ρ‹Ρ…
rows = []

# ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ JSON-Ρ„Π°ΠΉΠ» ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ Π΅Π³ΠΎ построчно
with open(input_file, 'r') as f:
    # Π˜Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ поэлСмСнтно
    for obj in ijson.items(f, 'item'):
        rows.append(obj)

        # Π‘Π°Π½Ρ‡ΠΈ ΠΏΠΎ 1000 записСй сохраняСм Π² Parquet
        if len(rows) >= 1000:
            table = pa.Table.from_pylist(rows)
            # Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ добавлСния
            pq.write_table(table, output_file, append=True)
            rows = []
		

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, конвСрсия ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° Π² binary:

			data = (7, 3.14, 10)
		

ΠŸΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ числа Π²ΠΎΡ‚ Π² Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΡƒΡŽ ΠΈ Π±Ρ‹ΡΡ‚Ρ€ΠΎΠ΄Π΅ΠΉΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π°Π±Ρ€Π°ΠΊΠ°Π΄Π°Π±Ρ€Ρƒ:

			b'\x07\x00\x00\x00\xc3\xf5H@\n\x00'
		

Бпособ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ: ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚

На курсах ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π°ΡˆΡƒ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈ с Redis β€” Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ классичСским Π±Π°Π·Π°ΠΌ Π²Ρ€ΠΎΠ΄Π΅ PostgreSQL. Π’Π°ΠΊ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΎΡΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΎ тСбя Π½Π΅ΠΌΠ°Π»ΠΎ людСй ΡƒΠΆΠ΅ ΠΎΡ‚ΡΡ‚Ρ€Π°Π΄Π°Π»ΠΈΡΡŒ Π½Π° Π½ΠΈΠ²Π΅ JSON ΠΈ Π΄Π°ΠΆΠ΅ создали Ρ†Π΅Π»ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Β«Π±ΡŒΡŽΡ‰Π΅Π΅Β» самыС распространСнныС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” Ρ€Π°Π·Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ элСмСнтов массива, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, сколько энСргии потрСбуСтся Π΄Π°ΠΆΠ΅ с ChatGPT, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипт Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ «схлопнСт» Π΄ΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ состояния Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠ² Π½ΠΈΠΆΠ΅?

			[
    {
        "id": 1,
        "name": "Иван Иванов",
        "experience": {
            "years": 5,
            "projects": [
                {
                    "name": "Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½",
                    "role": "Π’Π΅Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ",
                    "technologies": ["PHP", "MySQL", "JavaScript"],
                    "description": "Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° с высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ."
                },
                {
                    "name": "ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚Π°Π»",
                    "role": "PHP-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ",
                    "technologies": ["PHP", "Laravel", "HTML", "CSS"],
                    "description": "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°Π»Π° для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ использования."
                }
            ]
        },
        "skills": ["PHP", "MySQL", "Git", "HTML", "CSS"],
        "education": {
            "degree": "Π‘Π°ΠΊΠ°Π»Π°Π²Ρ€",
            "institution": "ΠΠ°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ унивСрситСт",
            "year": 2018
        },
        "location": "Москва",
        "contact": {
            "email": "ivan.ivanov@example.com",
            "phone": "+7 (999) 123-45-67"
        }
    },
    {
        "id": 2,
        "name": "ΠœΠ°Ρ€ΠΈΡ ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²Π°",
        "experience": {
            "years": 3,
            "projects": [
                {
                    "name": "БистСма управлСния Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ",
                    "role": "PHP-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ",
                    "technologies": ["PHP", "PostgreSQL", "Vue.js"],
                    "description": "Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π²Π΅Π±-прилоТСния для управлСния Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹."
                }
            ]
        },
        "skills": ["PHP", "PostgreSQL", "JavaScript", "Git"],
        "education": {
            "degree": "ΠœΠ°Π³ΠΈΡΡ‚Ρ€",
            "institution": "ВСхничСский унивСрситСт",
            "year": 2020
        },
        "location": "Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³",
        "contact": {
            "email": "maria.petrova@example.com",
            "phone": "+7 (999) 234-56-78"
        }
    }]
		

ΠŸΠ°Ρ€Ρƒ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄ я занималась ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π»ΠΎΠ³ΠΎΠ² Π±ΠΎΡ‚Π° Π² BigQuery (SQL-подобная Π±Π°Π·Π°), Π° ΠΏΠΎΡ‚ΠΎΠΌ Π±Ρ‹Π»Π° Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Β«Π·Π°Π±Ρ‹Ρ‚Ρ‹Ρ…Β» ΠΏΠΎΠ»Π΅ΠΉ (ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΡΠ²Π»ΡΠ»ΠΈΡΡŒ Ρ€Π΅ΠΆΠ΅, Ρ‡Π΅ΠΌ Ρ€Π°Π· Π² нСдСлю, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ скрипт Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ). Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ нСобходимости ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ схСму Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΠ΅Ρ€Π΅Π·Π°Π»ΠΈΠ²ΠΎΠΌ ΠΈ Π² Ρ†Π΅Π»ΠΎΠΌ Ρ„Ρ€ΡƒΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ситуациСй.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ понимаю: Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΌΠΎΡ€ΠΎΠΊΡƒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ с массивами β€” ΠΎΡ‚ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° строго Π·Π°Π΄Π°Π½Π½ΠΎΠΉ структуры ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅. Redis Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ создан для этого. Π’ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΠΎΠΌ массивС Ρ‡Π΅Ρ€Π΅Π· мСсяц появился экзСмпляр ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π° с Π½ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ portfolio? «РСдиска» ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ ΠΊ сСбС ΠΈ Ρ‚Π°ΠΊΠΎΠ΅, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±Π΅Π· мноТСствСнных ошибок. Π—Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π² дальнСйшСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎ? Π’Ρ‹Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ сСт с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ самописной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

			import redis

r = redis.Redis(
    host = ,
    port = ,
    password = ,
)

# Ѐункция прСобразования Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Π°Ρ‚Π°Ρ„Ρ€Π΅ΠΉΠΌ
def read_redis_set_to_dataframe(redis_set_name):
    # Π§Ρ‚Π΅Π½ΠΈΠ΅ всСх элСмСнтов сСта
    redis_set = r.smembers(redis_set_name)

    data = [json.loads(item) for item in redis_set] # ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ строковых прСдставлСний словарСй Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Python
    df = pd.DataFrame(data)

    return df

redis_set_name = 'candidates'

df = read_redis_set_to_dataframe(redis_set_name)
		
πŸ”₯Как быстро ΠΈ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с большими JSON-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ 1

И Ρ‡Ρ‚ΠΎ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎ, Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти сСрвСра, Ρ‡Ρ‚ΠΎ ускоряСт ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ с Π½ΠΈΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π² случаС с большими порциями. Если ваша компания, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ испытываСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒΡŽ.

ΠŸΡ€ΠΈΡΡ‚Π½Ρ‹ΠΉ бонус: Π»ΠΎΠ³ΠΈΠΊΠ° сСта (это Π°Π½Π°Π»ΠΎΠ³ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π±Π°Π·Π΅) ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния. Π’ΠΎ Π΅ΡΡ‚ΡŒ очистка ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° автоматичСски. И Ρ‚ΡƒΡ‚ ΠΎΡ‰ΡƒΡ‰Π°ΡŽΡ‚ΡΡ спасСнныС чСловСкочасы.

πŸ”₯Как быстро ΠΈ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с большими JSON-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ 2

МногиС ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… сСрвСров ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‚ прСднастроСнный Redis, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π° 5-10 ΠΌΠΈΠ½ΡƒΡ‚ встанСт ΠΈΠ·-ΠΏΠΎΠ΄ Docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΈ Ρ†Π΅Π½Ρ‹ Π½Π° Ρ‚Π°ΠΊΠΈΠ΅ услуги стрСмятся ΠΊ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Π³ΠΎΠ»Ρ‹ΠΉ Ubuntu Π½Π° ΠΌΠΈΠ½ΠΈΠΊΠ°Π»ΠΊΠ°Ρ… (300 Ρ€ΡƒΠ±Π»Π΅ΠΉ Π² мСсяц ΠΏΡ€ΠΎΡ‚ΠΈΠ² 130).

Π‘Ρ€Π΅Π΄ΠΈ нСдостатков «рСдиски» ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ† ΠΊ сСтам ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ стрСсс: докумСнтация вСсьма нСпростая ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒΡΡ Π½Π° Π½Π΅Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ восприятиС ΠΏΠΎΠ½Π°Ρ‡Π°Π»Ρƒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ энСргии. Но Ρ‚ΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ChatGPT.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если Π²Ρ‹ дорасли Π΄ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с массивными объСмами Π΄Π°Π½Π½Ρ‹Ρ…, это ΡƒΠΆΠ΅ прСкрасно. ΠŸΠΎΡ€ΠΎΠΉ стоит ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ сСбС Π½Π°ΠΎΡˆΠΈΠ±Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ с Π½ΠΈΠΌΠΈ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π±Π΅Ρ€Π΅Ρ‚Π΅ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π΅ для ситуации Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. ijson Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Redis ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°ΠΌ, asyncio Ρ‚ΠΎΠΆΠ΅ Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ свои тонкости β€” ΠΎΠ½ΠΈ ΠΈ опрСдСлят, ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ· Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅.

Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° Π½ΠΎΠ²Ρ‹ΠΌΠΈ постами
Π‘Π»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° Π½ΠΎΠ²Ρ‹ΠΌΠΈ постами ΠΏΠΎ Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΌ Ρ‚Π΅ΠΌΠ°ΠΌ
1К ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΉ10К ΠΏΠΎΠΊΠ°Π·ΠΎΠ²