【问题标题】:Is it possible to read a SQLite database into memory with SQLAlchemy?是否可以使用 SQLAlchemy 将 SQLite 数据库读入内存?
【发布时间】:2012-04-04 06:53:03
【问题描述】:

我是一个 Python 应用程序的用户,该应用程序的索引表很差,我想知道是否可以通过在应用程序启动时将 SQLite 数据库转换为内存数据库来提高性能。我的想法是,它将最大限度地减少全表扫描的问题,特别是因为 SQLite 可能正在创建自动索引,因为文档说默认情况下启用。如何使用 SQLAlchemy ORM(这是应用程序使用的)来实现这一点?

【问题讨论】:

  • 你说你不是程序员,但对我来说这听起来很像一个繁重的编程工作。但与其将 SQLite 更改为在内存中工作,不如简单地将索引添加到现有的 SQLite 数据库。这可以在不触及应用程序代码的情况下获得您要求的性能。搜索“SQLite 数据库编辑器”。

标签: python sqlite sqlalchemy


【解决方案1】:

在程序开始时,将数据库文件移动到 ramdisk,将 SQLAlchemy 指向它并进行处理,然后将 SQLite 文件移回非易失性存储。

这不是一个很好的解决方案,但它可以帮助您确定是否值得将数据库缓存在内存中。

【讨论】:

    【解决方案2】:

    每当你在 Python 中设置一个变量时,你就是在实例化一个对象。这意味着您正在为它分配内存。

    当您查询 sqlite 时,您只是将信息从磁盘读取到内存中。

    sqlalchemy 只是一个抽象。您可以通过查询数据库并将返回的数据设置为变量,以同样的方式将数据从磁盘读取到内存中。

    【讨论】:

    • 我认为OP希望通过将数据库缓存在内存中来避免磁盘访问成本。
    • 正确,我想最小化磁盘访问。
    • 这将涉及查询数据库中的所有数据,与内存中支持的数据库建立会话,创建表并插入查询的数据。 sqlalchemy 教程包含执行此操作所需的所有信息。
    • 当我说我是一个用户时,我应该进一步说我是一个非程序员。我可以剪切和粘贴解决方案,但除此之外......是否有特定的方法可以做我想做的事情,或者我是否还必须阅读整个 sqlalchemy 教程(并学习编程)?
    • 在执行这样的任务之前,您最好先了解一些基本知识。自己完成任务的最快方法当然是 SQLAlchemy 教程。然而,还有其他问题。如果您的数据库对于内存来说太大,您将不得不在启动时选择缓存的内容,甚至根据使用情况修改缓存。这可能会变得复杂,“好的”解决方案在很大程度上取决于您的特定用例。如果这是您的性能问题的一个很好的解决方案,这就是全部。确定这一点还需要领域知识和代码库分析。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2012-10-15
    • 2023-03-22
    相关资源
    最近更新 更多