Забить память по максимуму

253
28 сентября 2021, 02:10

Вопрос: Возможно ли как-то указать в sql запросе модерируемый объем памяти? Предположим есть большая база данных, а у меня всего 4 гб свободной пямяти (может быть и больше и меньше). Я хочу выбрать максимальное кол-во строк и присвоить этот список переменной, так чтобы компьютер не зависнул.

Что-то вроде этого:

from sqlalchemy import create_engine
import pandas as pd
db_connection = 'mysql+pymysql://Baron:Baroness@localhost/test_base'
conn = create_engine(db_connection)
data = pd.read_sql("SELECT * FROM table_name WHERE (указание на свободную память)", conn)

Или может есть какая-то модерируемая настройка памяти в самой Mysql для определенных таблиц?

Answer 1

Все известные мне алгоритмы машинного обучения будут создавать дополнительные временные и результируюшие матрицы в памяти, поэтому при первом же вызове model.fit(X_train, y_train) - вы скорее всего получите MemoryError при таком подходе...

В реляционных БД обычно можно указать максимальное число строк, которое вы хотите получить:

N = 10**5
sql = f"SELECT * FROM table_name ORDER BY rand() LIMIT {N}"
data = pd.read_sql(sql, conn)

Число строк N можно попытаться посчитать динамически - например прочитать 1000 строк из БД в DataFrame и посмотреть сколько памяти занимает данный DF (df.memory_usage().sum()) и дальше расчитать сколько строк нужно читать...

READ ALSO
Не работает ввод в input в modal

Не работает ввод в input в modal

Доброго времени суток!

127
C++, оператор приведения типа для enum class?

C++, оператор приведения типа для enum class?

Никак не получается написать оператор приведения типа из enum class в, например, size_tПодскажите, пожалуйста, как это сделать

157
Qt ошибка: 'class Ui::MainWindow' has no member named 'actionSave'; did you mean 'actionNew'?

Qt ошибка: 'class Ui::MainWindow' has no member named 'actionSave'; did you mean 'actionNew'?

Столкнулся с интересной ошибкойПару минут назад собирал проект, всё работало

416
Ускорение Сишниго ввода/вывода

Ускорение Сишниго ввода/вывода

Если в программе используется Сишный ввод/вывод (scanf(), printf()), то рассинхронизация потоков (std::ios_base::sync_with_stdio(false)) может увеличить производительность?...

110