Действительно ли MySQL подходит для тяжелой чтением базы данных с 3.5 м + строки? Если так, который механизм?

Я вижу два ответа с хорошими качествами, каждого с маленьким дефектом, таким образом, я дам свое взятие на нем:

Попытка os.path.exists , и рассматривают os.makedirs для создания.

import os
if not os.path.exists(directory):
    os.makedirs(directory)

, Как отмечено в комментариях и в другом месте, существует состояние состязания – если каталог будет создан между os.path.exists и os.makedirs, то вызовы, эти os.makedirs перестанут работать с OSError. К сожалению, ловля слоя OSError и продолжение не является надежной, поскольку это проигнорирует отказ создать каталог из-за других факторов, таких как недостаточные полномочия, полный диск, и т.д.

, Одна опция состояла бы в том, чтобы захватить OSError и исследовать встроенный код ошибки (см. , там межплатформенный способ получить информацию от Python’s OSError):

import os, errno

try:
    os.makedirs(directory)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

, С другой стороны, могла быть секунда os.path.exists, но предположить, что другой создал каталог после первой проверки, затем удалил ее перед второй – нас можно было все еще дурачить.

В зависимости от приложения, опасность параллельных операций может быть более или менее, чем опасность, созданная другими факторами, такими как полномочия файла. Разработчик должен был бы знать больше о конкретном разработанном приложении и его ожидаемая среда прежде, чем выбрать реализацию.

современные версии Python улучшают этот код вполне немного, обоих путем представления FileExistsError (в 3,3 +)...

try:
    os.makedirs("path/to/directory")
except FileExistsError:
    # directory already exists
    pass

... и путем разрешения аргумент ключевого слова [1 114] названный exist_ok (в 3,2 +).

os.makedirs("path/to/directory", exist_ok=True)  # succeeds even if directory exists.

5
задан Branden Hall 8 August 2009 в 02:34
поделиться

4 ответа

Я запускал на mysql БД гораздо большего размера - все должно быть в порядке. Просто тщательно настройте свои индексы.

InnoDB поддерживает лучшую семантику блокировки, поэтому, если будут происходить случайные или частые записи (или если вы хотите улучшить целостность данных), я бы предложил начать с этого, а затем протестировать myisam позже, если вы сможете » не достигли поставленных целей.

7
ответ дан 18 December 2019 в 13:17
поделиться

Поскольку это таблица с большим количеством операций чтения, я рекомендую использовать тип таблицы MyISAM. Если вы не используете внешние ключи, вы можете избежать ошибок, таких как this и that .

Резервное копирование или копирование таблицы на другой сервер так же просто, как копирование frm, MYI и файлы MYD.

1
ответ дан 18 December 2019 в 13:17
поделиться

Если вам нужно вычислить отчеты и сложные агрегаты, имейте в виду, что postgres ' оптимизатор запросов довольно умен и изобретателен, в то время как «оптимизатор» mysql довольно прост и глуп.

На большом соединении разница может быть огромной.

Единственное преимущество MySQL состоит в том, что он может воздействовать на индексы, не затрагивая таблицы.

Вы должны загрузить свой набор данных в обе базы данных и поэкспериментировать с более крупными запросами, которые вы собираетесь выполнить. Лучше потратить несколько дней на эксперименты, чем останавливаться на неверном выборе.

0
ответ дан 18 December 2019 в 13:17
поделиться

MyISAM имеет смысл только в том случае, если вам настолько нужна скорость, что для ее достижения вы готовы согласиться со многими недостатками целостности данных. Вы можете получить повреждение базы данных при любом нечистом завершении работы, нет внешних ключей , нет транзакций , это действительно ограничено. А поскольку 3,5 миллиона строк на современном оборудовании - это тривиальный набор данных (если только ваши строки не огромны), вы, конечно, не в той точке, где вы вынуждены оптимизировать производительность вместо надежности, потому что нет другого способа снизить производительность цели - это единственная ситуация, когда вам придется мириться с MyISAM.

Что касается того, выбирать ли вместо этого PostgreSQL, вы действительно не увидите большой разницы в производительности между ними в таком маленьком приложении. Если ты' Если вы уже знакомы с MySQL, вы, безусловно, можете оправдать его повторное использование, чтобы снизить уровень обучения.

Мне не нравится MySQL, потому что существует так много способов, с помощью которых вы можете поместить плохие данные в базу данных, где PostgreSQL не терпит этого. поведения (см. Сравнение скорости и надежности ), плохое поведение MyISAM - это лишь часть проблем. Учитывая, насколько разрозненно сообщество MySQL сейчас и неопределенность в отношении того, что Oracle собирается с ним делать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы у вас было еще несколько вариантов в будущем. В последнее время вокруг всегда бесплатного PostgreSQL с лицензией BSD стало намного меньше драмы, и, хотя и меньше, по крайней мере, все сообщество разработчиков движется в том же направлении.

вы, конечно, могли бы оправдать простое использование его снова, чтобы снизить вашу кривую обучения.

Мне не нравится MySQL, потому что существует множество способов получить неверные данные в базе данных, где PostgreSQL не терпит такого поведения (см. Сравнивая скорость и надежность ), плохое поведение MyISAM - это лишь часть проблем. Учитывая, насколько разрозненно сообщество MySQL сейчас и неопределенность в отношении того, что Oracle собирается с ним делать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы у вас было еще несколько вариантов в будущем. В последнее время вокруг всегда бесплатного PostgreSQL с лицензией BSD стало намного меньше драмы, и, хотя и меньше, по крайней мере, все сообщество разработчиков движется в том же направлении.

вы, конечно, могли бы оправдать простое использование его снова, чтобы снизить вашу кривую обучения.

Мне не нравится MySQL, потому что существует множество способов получить неверные данные в базе данных, где PostgreSQL не терпит такого поведения (см. Сравнивая скорость и надежность ), плохое поведение MyISAM - это лишь часть проблем. Учитывая, насколько разрозненно сообщество MySQL в настоящее время и неопределенность относительно того, что Oracle собирается с ним делать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы в будущем у вас было еще несколько вариантов. В последнее время вокруг всегда бесплатного PostgreSQL с лицензией BSD стало намного меньше драмы, и, хотя и меньше, по крайней мере, все сообщество разработчиков движется в том же направлении.

Мне нравится MySQL, потому что существует так много способов получить плохие данные в базе данных, где PostgreSQL нетерпим к такому поведению (см. Сравнение скорости и надежности ), плохое поведение MyISAM - это лишь часть проблем. . Учитывая, насколько разрозненно сообщество MySQL в настоящее время и неопределенность относительно того, что Oracle собирается с ним делать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы в будущем у вас было еще несколько вариантов. В последнее время вокруг всегда бесплатного PostgreSQL с лицензией BSD стало намного меньше драмы, и, хотя и меньше, по крайней мере, все сообщество разработчиков движется в том же направлении.

Мне нравится MySQL, потому что существует так много способов получить плохие данные в базе данных, где PostgreSQL не терпит такого поведения (см. Сравнение скорости и надежности ), плохое поведение MyISAM - это лишь часть проблем . Учитывая, насколько разрозненно сообщество MySQL сейчас и неопределенность в отношении того, что Oracle собирается с ним делать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы у вас было еще несколько вариантов в будущем. В последнее время вокруг всегда бесплатного PostgreSQL с лицензией BSD стало намного меньше драмы, и, хотя и меньше, по крайней мере, все сообщество разработчиков движется в том же направлении.

плохое поведение MyISAM - это лишь часть проблем. Учитывая, насколько разрозненно сообщество MySQL сейчас и неопределенность в отношении того, что Oracle собирается с ним делать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы у вас было еще несколько вариантов в будущем. В последнее время вокруг всегда бесплатного PostgreSQL с лицензией BSD стало намного меньше драмы, и, хотя и меньше, по крайней мере, все сообщество разработчиков движется в том же направлении.

плохое поведение MyISAM - это лишь часть проблем. Учитывая, насколько разрозненно сообщество MySQL сейчас и неопределенность в отношении того, что Oracle собирается с ним делать, вы можете подумать о том, чтобы взглянуть на PostgreSQL, чтобы у вас было еще несколько вариантов в будущем. В последнее время вокруг всегда бесплатного PostgreSQL с лицензией BSD стало намного меньше драмы, и, хотя и меньше, по крайней мере, все сообщество разработчиков движется в том же направлении.

6
ответ дан 18 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: