2013-05-11 4 views
4

Я разрабатываю приложение на Python, которое требует хранения (очень) больших наборов данных. Разбирает наиболее практичный способ хранения данных и получения их по запросу, или я должен использовать SQL вместо этого? Моими основными целями являются скорость и как можно меньше обработки.python pickle vs sql efficiency

Моя забота заключается в том, что рассол должен обрабатывать весь большой файл «на лету», что может негативно повлиять на производительность. Я не особенно знаком с маринованием за пределами использования, поэтому любое объяснение того, как это работает, было бы замечательно.

Прямо сейчас, я использую этот код:

users = pickle.load(open("users.py", "rb")) 
username = raw_input("Please enter a username: ") 
password = raw_input("Please enter a password: ") 
var = username in users 
if(var == 0): 
    return 0 
    exit() 
else: 
    if(users[username] != password): 
     return 0 
     exit() 
    else: 
     return 1 
     exit() 

визуализации, что пользователи содержит 1 миллиона записей, которые были бы более эффективными, это или SQL?

Любая помощь будет большим,

Благодаря

ответ

4

Рассол, как правило, подходят для хранения объектов, если вы хотите хранить 'необработанные данные эффективно, то рассол, вероятно, не путь, но его очень зависит от конкретной ситуации - это «загрузка» критического момента времени, у вас есть время разработки для создания базы данных, запросов и т. д.

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

Преимущество обоих вариантов рассола и db/SQL состоит в том, чтобы быть расширяемым. Помните, что pickle не является «безопасным», поэтому вам следует учитывать достоверность файла, например. Будет ли он передаваться между различными системами.

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

1

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

Предполагая, что users - это массив, вам придется искать этого пользователя от начала до конца массива. С помощью SQL у вас есть возможность добавлять индексы, которые в зависимости от того, как вы моделируете свой пользовательский объект, могут немного повысить ваш уровень.

Также pickle будет анализировать, воссоздавать и загружать сохраненные объекты, поэтому стоимость загрузки, которая (как в мощности процессора, так и в памяти), вероятно, сделает ее еще хуже.