Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách nhanh nhất để đọc bảng MySQL khổng lồ trong python

Một tùy chọn khác có thể là sử dụng multiprocessing mô-đun, chia truy vấn lên và gửi nó đến nhiều quy trình song song, sau đó nối kết quả.

Nếu không biết nhiều về pandas phân khúc - tôi nghĩ rằng bạn sẽ phải thực hiện phân khúc theo cách thủ công (điều này phụ thuộc vào dữ liệu) ... Không sử dụng LIMIT / OFFSET - hiệu suất sẽ rất tệ.

Đây có thể không phải là một ý tưởng hay, tùy thuộc vào dữ liệu. Nếu có một cách hữu ích để chia nhỏ truy vấn (ví dụ:nếu đó là thời gian hoặc có một số loại cột chỉ mục thích hợp để sử dụng, thì nó có thể có ý nghĩa). Tôi đã đưa ra hai ví dụ dưới đây để chỉ ra các trường hợp khác nhau.

Ví dụ 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) 

Ví dụ 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)

Có lẽ là những cách tốt hơn để làm điều này (và chưa được kiểm tra đúng cách, v.v.). Hãy quan tâm để biết nó diễn ra như thế nào nếu bạn thử nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cấu trúc tệp văn bản (bảng)

  2. Điều kiện NẾU Thực hiện Truy vấn, Khác Thực hiện Truy vấn Khác

  3. Vẽ nhiều biểu đồ với truy vấn Flot, html, PHP và MySql

  4. Quản lý giao dịch với DAO

  5. Sử dụng LAST_INSERT_ID () trong chèn nhiều hàng