【问题标题】:python pickle vs sql efficiencypython pickle vs sql效率
【发布时间】:2013-05-06 00:21:34
【问题描述】:

我正在用 Python 开发一个需要存储(非常)大数据集的应用程序。 pickle 是存储数据并根据请求检索数据的最实用方法,还是我应该考虑使用 SQL 代替?我的主要目标是速度和尽可能减少处理压力。

我担心 pickle 必须动态处理整个大文件,这可能会对性能产生不利影响。除了用法之外,我对泡菜并不是特别熟悉,所以任何关于它如何工作的解释都会很棒。

现在,我正在使用此代码:

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()

想象用户包含 100 万个条目,这将更有效,还是 SQL?

任何帮助都会很棒,

谢谢

【问题讨论】:

    标签: python sql pickle


    【解决方案1】:

    Pickle 通常适合存储对象,如果您想有效地存储“原始”数据,那么 pickle 可能不是要走的路,但它非常依赖于具体情况——“加载”数据时间紧迫,你有开发时间来设置数据库、查询等吗?

    如果您的数据是一百万对用户名和出生日期,那么 pickle 可能不是最好的方法,可以说将数据存储在纯文本文件中会更简单。

    pickle 和 db/SQL 解决方案都具有可扩展的优势。请记住,pickle 不是“安全的”,因此您应该考虑文件的可信度,例如会不会在不同系统之间转移。

    总体而言,如果您的数据集非常大,关系型 Db 可能比 pickle 更合适,但您可能还需要考虑其他存储引擎,例如Redis、MongoDb、Memcached。但是,所有这些都非常依赖于情况,因此您可以提供有关数据预期如何使用的更多信息将会很有用!

    【讨论】:

    • 对于具有 6 个浮点值和 100k 个条目的列表,pickle 读取和存储所有内容的速度比 SQLite 快 10 倍,SQLite 需要 0.8 秒,而 pickle 需要 0.08 秒
    【解决方案2】:

    当您在 users 对象中搜索某个用户时,我想 SQL 会是一个更好的解决方案。

    假设users 是一个数组,您必须从数组的开头到结尾搜索该用户。使用 SQL,您可以添加索引,这取决于您对用户对象建模的方式可以给您带来一点提升。

    pickle 还会解析、重新创建和加载存储的对象,因此仅加载成本(包括处理器能力和使用的内存)可能会使它成为更糟糕的选择。

    【讨论】:

      【解决方案3】:

      如果您将使用所有数据,则可以使用 pickle。如果你想要数据中的一行 sql 更好。比如你为数据科学做一个新模型pickle更好,如果你做用户密码检查,数据库sql是更好的解决方案。

      【讨论】:

        猜你喜欢
        • 2011-03-22
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 2012-07-09
        • 2021-04-21
        • 2017-10-20
        相关资源
        最近更新 更多