2

我即将编写一个小实用程序来组织和标记我的 mp3。

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

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

谢谢

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

抱歉,这是针对 Windows 应用程序的。

4

8 回答 8

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

于 2008-12-27T18:50:02.577 回答
2

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

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

它们不需要安装,并且仍然提供您习惯于从“真实”DBMS 进行的简单访问。

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

于 2008-12-22T22:39:12.057 回答
2

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

于 2008-12-22T22:43:39.070 回答
1

SQLITE如果您想在没有服务器安装或麻烦的情况下享受关系数据库的痛苦。

我会使用许多文本序列化格式中的一种。我个人认为YAML 1.1是最强大的(对引用对象图的内置支持)并且最容易被人类阅读/修改(解析是熊,使用诸如PyYAMLJYaml一些 .NET libaray之类的库)。

否则 XML 或 JSON 是足够的文件格式。

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

于 2008-12-22T22:39:33.023 回答
1

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

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

我没怎么用过,但是用在小项目上要好得多(持久化任何可序列化的对象都很好)

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

于 2008-12-22T23:15:43.980 回答
1

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

在 Java 中,可以使用标准序列化来完成(或者可以序列化到 XML 或从 XML 序列化以使其在某种程度上具有人类可读性和可编辑性)。

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

于 2008-12-22T23:40:08.690 回答
0

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

于 2008-12-22T22:42:10.227 回答
0

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

于 2008-12-23T21:11:48.863 回答