代码之家  ›  专栏  ›  技术社区  ›  K.Mulier

zodb python database with filestore:为什么临时文件保留在磁盘上?

  •  1
  • K.Mulier  · 技术社区  · 7 年前

    我正在用python 3.6中的zodb数据库模块进行试验。在我的实验中,我创建了一个 TreeSet() 并用数据填充它。然后提交事务(将更改保存到磁盘)并关闭数据库。

    from ZODB.FileStorage import FileStorage
    from ZODB import DB
    from persistent import Persistent
    from BTrees.OOBTree import TreeSet
    import transaction
    
    if __name__ == '__main__':
        # 1. Create ZODB database
        # ------------------------
        storage = FileStorage("C:/database_test/mydb.db")
        db = DB(storage)
        conn = db.open()
        root = conn.root()
        root.files = TreeSet()
    
    
        # 2. Fill the TreeSet
        # --------------------
        ...
    
        # 3. Save and close
        # ------------------
        transaction.commit()
        conn.close()
        db.close() # <- is this even necessary?
    

    我查看硬盘上剩余的文件。如您所见,还有三个临时文件保留在那里-即使在我关闭了数据库之后。

    enter image description here

    我关了什么东西吗( 数据库 , 连接 , 存储 , 交易 ,…)不正确?


    注:
    我不知道这是否重要,但我的系统如下:

    • Windows 10,64位
    • 蟒蛇3.6.3
    • ZODB 5.4.0(最新版本,截至2018年5月18日)
    2 回复  |  直到 7 年前
        1
  •  3
  •   metatoaster    7 年前

    这个 .index 文件不是临时文件,但它是持久化的索引文件。如果不存在,它将始终完全重新生成(对于更大的数据库,这将需要一些时间)。

    这个 .temp 文件用于在完全提交之前生成的临时数据。

    这个 .lock 文件是为了确保没有两个进程打开该文件。它包含打开它的最后一个进程的PID。如果它终止了一个新进程,那么它将把PID写入其中。

    实际上还有更多的文件,它们被记录在 class docstring .

        2
  •  1
  •   BoarGules    7 年前

    不,它们不是真正的临时文件。它们是永久性文件,有时包含瞬时数据。

    除了数据文件之外,还创建了一些辅助文件。这些数据可能会在不影响数据完整性的情况下丢失,但是丢失索引文件可能会导致启动非常缓慢。( http://www.zodb.org/en/latest/reference/storages.html#included-storages )