Как большой может база данных MySQL добираться, прежде чем производительность начнет ухудшаться

Есть ли у вас представление о ожидаемом выходе? Напр. это будет?

>>> f  = FileItem("/foo/bar")
>>> magic(f)
'{"fname": "/foo/bar"}'

В этом случае вы можете просто называть json.dumps(f.__dict__).

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

Для тривиального примера см. ниже.

>>> from json import JSONEncoder
>>> class MyEncoder(JSONEncoder):
        def default(self, o):
            return o.__dict__    

>>> MyEncoder().encode(f)
'{"fname": "/foo/bar"}'

Затем вы передаете этот класс в метод json.dumps() как cls kwarg:

json.dumps(cls=MyEncoder)

Если вы также хотите декодировать, вам нужно будет поставить пользовательский object_hook в класс JSONDecoder . Например,

>>> def from_json(json_object):
        if 'fname' in json_object:
            return FileItem(json_object['fname'])
>>> f = JSONDecoder(object_hook = from_json).decode('{"fname": "/foo/bar"}')
>>> f
<__main__.FileItem object at 0x9337fac>
>>> 

291
задан davejal 27 January 2016 в 13:40
поделиться

7 ответов

Физический размер базы данных не имеет значения. Количество записей не имеет значения.

, По моему опыту, самой большой проблемой, в которой Вы собираетесь работать к, не является размер, но количество запросов, которые можно обработать за один раз. Скорее всего, Вы оказываетесь перед необходимостью перемещаться в основную/ведомую конфигурацию так, чтобы запросы чтения могли работать против ведомых устройств и запросов записи, выполненных против ведущего устройства. Однако, если Вы еще не готовы к этому, можно всегда настраивать индексы для запросов, которые Вы выполняете для ускорения времени отклика. Также существует большая тонкая настройка, можно сделать к сетевому стеку и ядру в Linux, который поможет.

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

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

198
ответ дан NTDLS 23 November 2019 в 01:42
поделиться

Я однажды был призван для рассмотрения mysql, который "прекратил работать". Я обнаружил, что файлы DB находились на Файловом сервере сетевых устройств, смонтированном с NFS2 и с максимальным размером файла 2 ГБ. И конечно же, таблица, которая прекратила принимать транзакции, была точно 2 ГБ на диске. Но относительно кривой производительности мне говорят, что она работала как чемпион до тех пор, пока она не работала вообще! Этот опыт всегда служит для меня в качестве хорошего напоминания, что всегда существуют размеры выше, и ниже того Вы естественно подозреваете.

9
ответ дан jj33 23 November 2019 в 01:42
поделиться

Довольно бессмысленно говорить о "производительности базы данных", "производительность запросов" является лучшим термином здесь. И ответ: это зависит от запроса, данные, которыми это управляет на, индексы, аппаратные средства, и т.д. Можно понять то, сколько строк будет просканированными и с чем индексы будут используемыми, ОБЪЯСНЯЕТ синтаксис.

2 ГБ действительно не рассчитывают как "большая" база данных - это - больше среднего размера.

18
ответ дан deadprogrammer 23 November 2019 в 01:42
поделиться

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

Это правда. Другая вещь, которая обычно работает, состоит в том, чтобы просто уменьшить количество данных, с которыми это неоднократно работало. Если у Вас есть "старые данные" и "новые данные" и 99% Вашей работы запросов с новыми данными, просто переместите все старые данные в другую таблицу - и не смотрите на него;)

-> Взглянули на разделение .

23
ответ дан BlaM 23 November 2019 в 01:42
поделиться

В целом это - очень тонкая проблема и не тривиальное безотносительно. Я поощряю Вас читать mysqlperformanceblog.com и MySQL High Performance. Я действительно думаю, что нет никакого общего ответа для этого.

я работаю над проектом, который имеет базу данных MySQL почти с 1 ТБ данных. Самым важным фактором масштабируемости является RAM. Если индексы Ваших таблиц вписываются в память, и Ваши запросы высоко оптимизированы, можно служить разумной сумме запросов со средней машиной.

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

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

существует много к этому, выходит и как в большом количестве случаев, дьявол находится в деталях.

82
ответ дан Elnur Abdurrakhimov 23 November 2019 в 01:42
поделиться

Также не упустите сложные соединения. Сложность транзакции может быть большим фактором в дополнение к объему сделки.

Осуществляющие рефакторинг тяжелые запросы иногда предлагает большое повышение производительности.

9
ответ дан saint_groceon 23 November 2019 в 01:42
поделиться

2 ГБ и около 15 миллионов записей - это очень маленькая база данных - Я запускал гораздо большие на Pentium III (!), И все по-прежнему работает довольно быстро .. Если у вас медленный, это проблема дизайна базы данных / приложения, а не mysql.

21
ответ дан 23 November 2019 в 01:42
поделиться
Другие вопросы по тегам:

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