Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

अजगर में विशाल MySQL तालिका को पढ़ने का सबसे तेज़ तरीका

एक अन्य विकल्प multiprocessing . का उपयोग करना हो सकता है मॉड्यूल, क्वेरी को विभाजित करना और इसे कई समानांतर प्रक्रियाओं में भेजना, फिर परिणामों को संयोजित करना।

pandas के बारे में ज्यादा जाने बिना चंकिंग - मुझे लगता है कि आपको मैन्युअल रूप से चंकिंग करना होगा (जो डेटा पर निर्भर करता है) ... LIMIT / OFFSET का उपयोग न करें - प्रदर्शन भयानक होगा।

डेटा के आधार पर यह एक अच्छा विचार नहीं हो सकता है। यदि क्वेरी को विभाजित करने का कोई उपयोगी तरीका है (उदाहरण के लिए यदि यह एक समय श्रृंखला है, या उपयोग करने के लिए किसी प्रकार का उपयुक्त इंडेक्स कॉलम है, तो यह समझ में आ सकता है)। मैंने अलग-अलग मामलों को दिखाने के लिए नीचे दो उदाहरण दिए हैं।

उदाहरण 1

import pandas as pd
import MySQLdb

def worker(y):
    #where y is value in an indexed column, e.g. a category
    connection = MySQLdb.connect(user='xxx', password='xxx', database='xxx', host='xxx')
    query = "SELECT * FROM example_table WHERE col_x = {0}".format(y)
    return pd.read_sql(query, connection)

p = multiprocessing.Pool(processes=10) 
#(or however many process you want to allocate)

data = p.map(worker, [y for y in col_x_categories])
#assuming there is a reasonable number of categories in an indexed col_x

p.close()
results = pd.concat(data) 

उदाहरण 2

import pandas as pd
import MySQLdb
import datetime

def worker(a,b):
    #where a and b are timestamps
    connection = MySQLdb.connect(user='xxx', password='xxx', database='xxx', host='xxx')
    query = "SELECT * FROM example_table WHERE x >= {0} AND x < {1}".format(a,b)
    return pd.read_sql(query, connection)

p = multiprocessing.Pool(processes=10) 
#(or however many process you want to allocate)

date_range = pd.date_range(start=d1, end=d2, freq="A-JAN")
# this arbitrary here, and will depend on your data /knowing your data before hand (ie. d1, d2 and an appropriate freq to use)

date_pairs = list(zip(date_range, date_range[1:]))
data = p.map(worker, date_pairs)

p.close()
results = pd.concat(data)

शायद ऐसा करने के अच्छे तरीके (और ठीक से परीक्षण नहीं किया गया है)। यह जानने में रुचि लें कि यदि आप इसे आजमाते हैं तो यह कैसा होता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटा स्रोत के रूप में MySQL तालिका डेटा का उपयोग करके Google चार्ट उत्पन्न करने में सक्षम नहीं है

  2. जर्मन भाषा के लिए सबसे अच्छा MySQL संयोजन क्या है

  3. MySQL परिणाम को बैश में संसाधित करना

  4. mysqldump त्रुटि 1045 सही पासवर्ड आदि के बावजूद प्रवेश निषेध

  5. PHP MYSQL समूह रैंकिंग क्वेरी