官方sqlite3网页 有文章我应该考虑sqlite作为fopen()函数的替代。

你怎么看待这件事?用SQLITE重新启动应用程序内部数据存储总是很好的解决方案吗?这种解决方案的优点和缺点是什么?

你有一些经验吗?

编辑:您的经历如何?这个容易用吗?这是痛苦还是很快乐?你喜欢它吗?

有帮助吗?

解决方案

这取决于。有一些矛盾的指标:

  • 对于配置文件,与使用关系数据库相比,使用纯文本或XML更容易进行调试或更改,甚至像SQLITE一样轻量级。

  • 与使用关系表相比,使用(例如)XML的树结构更容易描述(例如)

  • SQLite API的记录很差 - 没有足够的示例,并且超链接很差。 OTOH,如果您愿意挖掘信息,则信息就在那里。

  • 直接使用专用二进制格式将比在数据库中存储与BLOB相同的格式更快

  • 数据库腐败可能意味着 全部 您的数据而不是在一个不好的文件中

OTOH,如果您的内部数据非常适合关系模型,并且如果有很多AA,我建议您使用SQLite-我自己将其用于其中一个项目。

关于经验 - 我使用它,它运行良好,并且易于与现有代码集成。如果文档更容易导航,我会给它5星 - 因为我会给它4星。

其他提示

与往常一样,没有“一个尺寸适合所有”解决方案

如果您需要将数据存储在独立文件中,并且可以利用SQL数据库的关系数据库功能而不是SQLITE。

如果您的数据不适合关系模型(例如,层次数据),或者您希望您的数据是人性阅读(配置文件),或者您需要与另一个系统互操作,而不是SQLite不会很有帮助,并且XML可能会会更好。

另一方面,如果您需要同时访问多个程序或计算机的数据,而不是SQLITE不是一个最佳选择,则需要“真实”数据库服务器(MS SQL,Oracle,MySQL,Posgresql ...) 。

Sqlite的原子性是一个加号。知道如果您中途写一些数据(可能在中间崩溃),则不会损坏您的数据文件。我通常通过在成功的负载上备份文件来完成与XML配置文件相似的事情,而将来的任何失败负载(表明损坏)都会自动恢复最后的备份。当然,它不是颗粒状的,也不是原子质,但这足以满足我的欲望。

我发现Sqlite很高兴与之合作,但我不认为这是Fopen()的一定程度的替代品。

例如,我刚刚写了一个软件,该软件正在从Web服务器下载图像并在本地缓存。将它们存储为单个文件,我可以在Windows Explorer中观看它们,这肯定会带来好处。但是我需要保留一个索引,以在URL和图像文件之间映射以使用缓存。将它们存储在sqlite数据库中,它们都坐在一个整洁的小文件中,我可以通过url访问它们(从缓存中选择imgdata where url ='http://foo.bar.jpg')几乎没有努力。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top