轻量级商店机制

时间:2008-12-22 22:36:10

标签: storage

我即将编写一个小工具来管理和标记我的mp3。

存储少量数据的最佳方法是什么。更重要的是,是否存在我不需要安装客户端/服务器环境的数据库,我只是包含库而且我很好?

我可以使用XML,但我担心文件大小会变得很大并且很难处理,更不用说保持内存占用空间小了。

由于

编辑:我还没有决定语言,我想让我的决定独立于平台。如果我不得不选择,很可能是.NET,第二个Java,第三个C ++。

我很抱歉,这适用于Windows应用程序。

8 个答案:

答案 0 :(得分:3)

在Windows上,您可以使用内置的esent数据库引擎。您可以在C ++中使用API​​

http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx

还有一个可以在C#代码中使用的托管互操作层:

http://www.codeplex.com/ManagedEsent

答案 1 :(得分:2)

您在谈论哪种语言/平台?

在Java世界中,我更喜欢使用嵌入式数据库,例如HSQLDBH2JavaDB(f.k.a. Derby)。

他们不需要安装,仍然提供您从“真正的”DBMS中习惯的简单访问。

在C / Python / Unixy世界中,SQLite是该领域的热门竞争者。

答案 2 :(得分:2)

另一种选择是Berkeley数据库的各种形式(例如,db3,db4,SleepyCat。)

答案 3 :(得分:1)

看看Prevayler - 它是一个序列化持久性框架(如果你想人类阅读你的数据,请使用xstream等),这非常快,不需要注释和“只是工作”。一些基本信息:

  • 它确实强加了一个更严格的事务模式,因为它不会给你自动回滚:
    • 确保交易成功(使用当前的系统状态) - 例如现在有意义吗?
    • [交易被添加到队列],并存储(用于电源重置等)
    • 执行事务并将其应用于对象结构。
  • 写入1000次交易/秒
  • 每秒读取100,000次交易

我没有太多使用它,但它对于小项目来说太好了(坚持任何可序列化对象是如此美妙)

哦 - 至于每个人说“你在运行什么平台?”,Prevayler(java)有很多平台的端口,但我找不到一个像样的清单:(。我记得有大约5-7,但只能记住.NET。

答案 4 :(得分:1)

如果您计划在程序运行时将所有内容存储在内存中,那么使用您编写的基本load()和save()函数序列化到文件就可以了,并且比完整版更少痛苦在DB。

在Java中,可以使用标准序列化来完成(或者可以与XML串行化以使其具有人类可读性和可编辑性)。

它不应该影响你的内存占用,因为它只是保存和恢复你的对象。你不会得到交易和随机访问和查询以及所有好东西。

答案 5 :(得分:0)

SQLITE如果你想要没有服务器安装或麻烦的关系数据库的痛苦。

我会使用众多文本序列化格式之一。我个人认为YAML 1.1是最强大的(对参考对象图的内置支持)并且最容易被人阅读/修改(解析是熊,使用诸如PyYAML或{的库{3}}或JYaml)。

否则XML或JSON是适当的文件格式。

无论使用哪种格式,如果您担心磁盘使用情况,只需压缩文件即可。如果您担心内存使用情况,那么我不会看到您的序列化格式如何重要......

答案 6 :(得分:0)

你甚至可以使用xml,json,.ini文件......甚至是文本文件

答案 7 :(得分:0)

我会建议SQL之类的数据库(例如SQLLite)。今天你的要求可能会使一个完整的SQL数据库显得愚蠢。但你永远不知道这个“小项目”多年来会增长多少。当它确实增长到你必须拥有一个SQL引擎时,你会很高兴你不只是序列化一些Java对象或以JSON格式存储东西。