دنبال کنید

تجربه کار با یک دیتابیس 21 گیگابایتی!

سلام و عر ض ادب به همه دوستان و همراهان عزیزم، امیدوارم هرکجای دنیا که هستیدخوشحال و خندان باشید، در چند شب گذشته، یک پروژه جالب و چالش‌برانگیز داشتم و تصمیم گرفتم تجربه‌ی خودم را با شما به اشتراک بگذارم. شاید شما هم مثل من با چالش‌هایی روبه‌رو شده باشید که برای حل آن‌ها نیاز به ترکیبی از ابزارهای مختلف و کمی خلاقیت داشته باشید. اینجا داستان پروژه من است که به کمک جی‌پی‌تی، به نتیجه‌ای عالی رسید.

شرح پروژه: استخراج دیتا از یک دیتابیس حجیم، به سرعت و با دقت!

ابزارهایی که استفاده کردم: بعد از 8 ساعت تلاش نافرجام، من از پایتون، MySqL Workbench و البته دوست خوبم، جی‌پی‌تی کمک گرفتم. و در نهایت، نتیجه، موفقیت بود.

داستان از کجا شروع شد؟

قرار بود یک دیتابیس دامپ‌شده از سایت libgen را استخراج کنیم و داده‌های آن را در یک سایت وردپرسی ایمپورت کنیم. حجم دیتابیس ابتدا به صورت زیپ 5 گیگابایت بود و زمانی که آن را استخراج کردم، چشم‌هایم چهار تا شد! چرا که حجم دیتابیس به 21 گیگ رسید.

اولین سوالی که برای من پیش آمد این بود که حالا چطور باید این دیتابیس حجیم را باز کنم و ببینم که چه جداولی دارد، ساختار آن به چه صورت است و چطور باید کدی بنویسم که کارهای مورد نظر من را انجام دهد.

جستجو برای ابزار مناسب

برای شروع، به سراغ ابزارهایی رفتم که می‌توانستند این فایل SqL حجیم را باز کنند. از نرم‌افزار معروف ماکروسافت استفاده کردم، اما قبل از آن تصمیم گرفتم که تمام فرایند را بر روی یک VPS (سرور مجازی خصوصی) انجام دهم. چرا؟ چون سرعت اینترنت VPS آلمان 100 مگابیت بر ثانیه است و این موضوع باعث می‌شود که دانلود و آپلود داده‌ها به سرعت انجام شود. پس همه چیز سریع‌تر و بدون معطلی پیش می‌رود.

اما متاسفانه نرم‌افزار ماکروسافت گفت که این فایل خیلی سنگین است و نمی‌تواند آن را باز کند. سه یا چهار نرم‌افزار دیگر هم تست کردم ( Navicat for mysql )، اما نتیجه مشابه بود

. تا این‌که در نهایت با MySQL Workbench توانستم به راحتی فایل دیتابیس را باز کنم. این ابزار به راحتی دیتابیس را بارگذاری کرد و من توانستم ساختار آن را مشاهده کنم.

قبل از این که به سراغ ایمپورت دیتا بروم، با پایتون کدی نوشته بودم که خط به خط دیتابیس را می‌خواند و مثلاً 100 خط از آن را به خروجی می‌داد. اما این 100 خط فقط از یک جدول بود و به خواسته‌ی من نمی‌رسید. در نتیجه تصمیم گرفتم که روند خواندن داده‌ها را به شکل بهتری مدیریت کنم.

ساخت ویو و استخراج داده‌ها

پس از اینکه دیتابیس را به خوبی بررسی کردم، یک ویو (View) ایجاد کردم و فیلدهای مورد نظر خود را به آن اضافه کردم. سپس، با استفاده از پایتون، شروع به استخراج داده‌ها کردم. در این مرحله، داده‌ها را به 1000 فایل تقسیم کردم (حدود 2 میلیون کتاب در دیتابیس بود). هر فایل به صورت جداگانه آماده شد تا بتوانم آن‌ها را به راحتی به وردپرس ایمپورت کنم.

ربات‌های جی‌پی‌تی: کمک در لحظات سخت

در این مرحله، ربات‌های مختلفی را به کمک جی‌پی‌تی ساختیم تا داده‌ها را به وردپرس ایمپورت کنند. فرایند کلی در عرض 2 روز و با استفاده از VPS به پایان رسید. جالب این که، در حالی که خودم در سفر بودم، ربات‌های ساخته‌شده توسط جی‌پی‌تی به‌خوبی کار را پیش بردند و تمامی داده‌ها را به وردپرس منتقل کردند.

نتیجه‌گیری: شما ایده‌پرداز باشید، جی‌پی‌تی مجری شما خواهد بود

در نهایت، این پروژه به من نشان داد که در دنیای امروز، شما نیازی به انجام همه کارها به‌صورت دستی ندارید. تنها کافیست صاحب ایده باشید و ابزارهای مناسب، از جمله جی‌پی‌تی، را در اختیار داشته باشید. در این پروژه، جی‌پی‌تی به‌عنوان مجری توانست به من کمک کند تا به سرعت و دقت بالا دیتابیس را استخراج کرده و داده‌ها را به وردپرس منتقل کنم.

پس، اگر شما هم با پروژه‌ای پیچیده روبه‌رو هستید، به یاد داشته باشید که گاهی تنها نیاز دارید به ابزاری مثل جی‌پی‌تی اعتماد کنید تا کارهای سنگین و تکراری را برای شما انجام دهد. در دنیای فناوری، همیشه راهی برای ساده‌تر کردن فرایندها وجود دارد!

پایان داستان، موفقیت و یادگیری در هر لحظه.

کد پایتون پروژه:

import mysql.connector
import json

# اطلاعات اتصال به پایگاه داده
mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="0000",
    database="leb",
    auth_plugin='mysql_clear_password'
)

mycursor = mydb.cursor(dictionary=True)

# شمارش تعداد کل ردیف‌ها
count_query = "SELECT COUNT(*) AS total FROM BookDetails WHERE Language = 'English';"
mycursor.execute(count_query)
total_rows = mycursor.fetchone()['total']
print(f"Total rows with Language 'English': {total_rows}")

offset = 0
chunk_size = 1000
file_index = 1

while True:
    # اجرای کوئری با OFFSET، LIMIT و WHERE
    query = f"SELECT * FROM BookDetails WHERE Language = 'English' ORDER BY Year DESC LIMIT {chunk_size} OFFSET {offset};"
    mycursor.execute(query)
    results = mycursor.fetchall()

    if not results:
        break  # اگر نتیجه‌ای وجود نداشت، حلقه را متوقف کن

    # ذخیره نتایج در فایل JSON
    with open(f"BookDetails_English_chunk_{file_index}.json", "w", encoding="utf-8") as f:
        json.dump(results, f, ensure_ascii=False, indent=4) # indent برای خوانایی بیشتر

    print(f"BookDetails_English_chunk_{file_index}.json created.")

    offset += chunk_size
    file_index += 1

mycursor.close()
mydb.close()
دیدگاه‌ها
به بحث بپیوندید و نظر خود را به اشتراک بگذارید
افزودن دیدگاه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

خبرنامه
نوشته ها را دنبال کنید!
آخرین به روز رسانی ها، نکات خلاقانه و منابع انحصاری را مستقیماً در ایمیل خود دریافت کنید. بیایید آینده طراحی و نوآوری را با هم بررسی کنیم.