Есть ли у вас представление о ожидаемом выходе? Напр. это будет?
>>> 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>
>>>
Физический размер базы данных не имеет значения. Количество записей не имеет значения.
, По моему опыту, самой большой проблемой, в которой Вы собираетесь работать к, не является размер, но количество запросов, которые можно обработать за один раз. Скорее всего, Вы оказываетесь перед необходимостью перемещаться в основную/ведомую конфигурацию так, чтобы запросы чтения могли работать против ведомых устройств и запросов записи, выполненных против ведущего устройства. Однако, если Вы еще не готовы к этому, можно всегда настраивать индексы для запросов, которые Вы выполняете для ускорения времени отклика. Также существует большая тонкая настройка, можно сделать к сетевому стеку и ядру в Linux, который поможет.
я имел, мои получают до 10 ГБ только с умеренным количеством соединений, и оно обработало запросы очень хорошо.
я сфокусировался бы сначала на Ваших индексах, затем сделать, чтобы администратор сервера посмотрел на Вашу ОС, и если все, что не помогает ей, могло бы быть пора реализовать основную/ведомую конфигурацию.
Я однажды был призван для рассмотрения mysql, который "прекратил работать". Я обнаружил, что файлы DB находились на Файловом сервере сетевых устройств, смонтированном с NFS2 и с максимальным размером файла 2 ГБ. И конечно же, таблица, которая прекратила принимать транзакции, была точно 2 ГБ на диске. Но относительно кривой производительности мне говорят, что она работала как чемпион до тех пор, пока она не работала вообще! Этот опыт всегда служит для меня в качестве хорошего напоминания, что всегда существуют размеры выше, и ниже того Вы естественно подозреваете.
Довольно бессмысленно говорить о "производительности базы данных", "производительность запросов" является лучшим термином здесь. И ответ: это зависит от запроса, данные, которыми это управляет на, индексы, аппаратные средства, и т.д. Можно понять то, сколько строк будет просканированными и с чем индексы будут используемыми, ОБЪЯСНЯЕТ синтаксис.
2 ГБ действительно не рассчитывают как "большая" база данных - это - больше среднего размера.
я сфокусировался бы сначала на Ваших индексах, чем сделали, чтобы администратор сервера посмотрел на Вашу ОС, и если все, что не помогает ей, могло бы быть время для основной/ведомой конфигурации.
Это правда. Другая вещь, которая обычно работает, состоит в том, чтобы просто уменьшить количество данных, с которыми это неоднократно работало. Если у Вас есть "старые данные" и "новые данные" и 99% Вашей работы запросов с новыми данными, просто переместите все старые данные в другую таблицу - и не смотрите на него;)
-> Взглянули на разделение .
В целом это - очень тонкая проблема и не тривиальное безотносительно. Я поощряю Вас читать mysqlperformanceblog.com и MySQL High Performance. Я действительно думаю, что нет никакого общего ответа для этого.
я работаю над проектом, который имеет базу данных MySQL почти с 1 ТБ данных. Самым важным фактором масштабируемости является RAM. Если индексы Ваших таблиц вписываются в память, и Ваши запросы высоко оптимизированы, можно служить разумной сумме запросов со средней машиной.
количество записей действительно имеет значение, в зависимости от того, как Ваши таблицы похожи. Вот в чем разница для имения большого количества varchar полей или только нескольких ints или longs.
физический размер базы данных имеет значение также: думайте о резервных копиях, например. В зависимости от Вашего механизма Ваши физические файлы дб на растут, но не уменьшаются, например, с innodb. Так удаляя много строк, не помогает уменьшить Ваши физические файлы.
существует много к этому, выходит и как в большом количестве случаев, дьявол находится в деталях.
Также не упустите сложные соединения. Сложность транзакции может быть большим фактором в дополнение к объему сделки.
Осуществляющие рефакторинг тяжелые запросы иногда предлагает большое повышение производительности.
2 ГБ и около 15 миллионов записей - это очень маленькая база данных - Я запускал гораздо большие на Pentium III (!), И все по-прежнему работает довольно быстро .. Если у вас медленный, это проблема дизайна базы данных / приложения, а не mysql.