文件与数据库的内存使用情况,用于简单数据存储

时间:2011-05-30 21:04:42

标签: python django memory


我正在为具有同步功能的Javascript应用程序编写服务器。客户端创建和修改的文件和目录需要同步到服务器(需要在服务器上对客户端进行相同的更改,包括删除)。

由于每个文件都在服务器上,我正在讨论对应于每个文件的MySQL数据库条目的需求。需要为每个用户在每个文件/目录中保留以下信息:

  1. 是否已删除(因为删除需要同步到其他客户端)
  2. 上次修改每个文件的时间戳(所以我知道文件是否需要客户端更新)
  3. 我可以将这两条信息保存在文件中(例如,在每个用户的目录中包含文件路径+时间戳的.deleted文件和.modified文件)或数据库中。(

    但是,我还必须适应80mb的内存限制。在文件存储和之间 数据库存储,为此目的会更节省内存吗?

    编辑:文件必须存储在文件系统上(而不是数据库中),用户可以使用他们可以使用的存储空间配额。

3 个答案:

答案 0 :(得分:1)

只要文件数量很少,文件系统变体的内存就可能更高效,但该解决方案可能无法扩展。数据库经过优化,可以完全实现。随着文件和请求数量的增加,搜索文件系统,打开文件,搜索文档将会很昂贵。

但是没有人说你必须使用MySQl。像Redis这样的NoSQL数据库,或者类似CouchDB(你可以保存文件本身并包含版本控制)的东西可能是更有吸引力的解决方案。

这里是NoSQL databases的快速比较。 还有longer comparison

编辑:根据您的评论,我将按如下方式构建它:创建一个API,为您想要执行的所有操作提取后端。然后使用最常发生的2或3个操作实现后端部分,或者对于文件系统和数据库(或两个)可能更昂贵。测试和基准。

答案 1 :(得分:0)

我会选择其中一个NoSQL数据库。您可以存储文件内容并根据用户的ID提供一些关键功能,以便在需要时检索这些内容。对于这种情况,RedisCasandra可能是不错的选择。有很多库可以在Python以及许多其他语言中使用这些数据库。

答案 2 :(得分:0)

在我看来,唯一真正的方法是建立一个测试系统并比较空间要求。以编程方式生成一些随机数据不应该花那么长时间。有人可能认为文件系统会更有效率,但数据库可以并且可能压缩数据或对其进行重复数据删除,或者其他任何操作。不要忘记,数据库也可以更容易地实现新功能,也许是访问控制。