Xml或Sqlite,何时删除数据库的Xml?
我非常喜欢用Xml保存数据,但是sqlite/数据库什么时候会成为更好的选择呢?例如,当xml包含x个以上的项或大于y MB时 我正在编写一个rss阅读器,我相信我在使用xml而不是sqlite数据库来存储所有提要项的缓存时做出了错误的选择。有些订阅源在一个月后拥有约1mb的xml文件,另一个订阅源拥有700多个项目,而大多数订阅源只有约30个项目,几个月后大小约为50kb 我目前没有实施cap的计划,因为我希望能够搜索所有内容 因此,我的问题是:Xml或Sqlite,何时删除数据库的Xml?,xml,database,Xml,Database,我非常喜欢用Xml保存数据,但是sqlite/数据库什么时候会成为更好的选择呢?例如,当xml包含x个以上的项或大于y MB时 我正在编写一个rss阅读器,我相信我在使用xml而不是sqlite数据库来存储所有提要项的缓存时做出了错误的选择。有些订阅源在一个月后拥有约1mb的xml文件,另一个订阅源拥有700多个项目,而大多数订阅源只有约30个项目,几个月后大小约为50kb 我目前没有实施cap的计划,因为我希望能够搜索所有内容 因此,我的问题是: sqlite/数据库的开销何时超过使用xml
我还需要修改已读/未读状态,当我循环遍历xml中的所有节点以查找该项,然后将其设置为已读/未读时,这种状态看起来非常糟糕。对我来说,这实际上取决于您对它们做了什么,有多少用户/进程需要同时访问它们等等 我一直在处理大型XML文件,但它们是单进程、导入样式的项目,多用户或性能并不是真正需要的
所以这实际上是一种平衡。我说这不是数据大小的问题,而是数据类型的问题。如果数据是结构化的,请使用关系数据库。如果您的数据是半结构化的,请使用XML或XML数据库(如果数据量增长过大)。我不会使用XML存储RSS项目。提要阅读器在接收数据时不断进行更新 使用XML,您需要首先从文件中加载数据,对其进行解析,然后将其存储以便于搜索/检索/更新。听起来像是一个数据库
另外,如果应用程序崩溃会发生什么情况?如果使用XML,XML文件中的数据与内存中的数据的状态是什么。至少使用SQLite,您可以获得原子性,因此您可以确保应用程序将以与上次数据库写入时相同的状态启动。当您需要将数据从应用程序移动到其他地方或在应用程序之间共享信息时,XML最好用作交换格式。对于几乎任何大小的应用程序,数据库都应该是首选的存储方法 如果您的搜索使用db。您可以将xml文件拆分为目录以便于查找,但管理开销很容易变得相当大。您还可以通过sql db获得比性能更高的性能 我同意@Bradley的观点 XML速度非常慢,作为存储格式并不特别有用。为什么要麻烦?您是否会使用文本编辑器手动编辑数据?如果是这样,与YAML之类的格式相比,XML仍然不是一种非常方便的格式。使用类似SQlite的东西,查询更容易编写,并且有一个定义良好的API用于输入和输出数据 如果您需要在程序之间发送数据,XML是很好的。但为了提高效率,您可能应该在发送时生成XML,并在接收时将其解析为“真实数据” 所有这些都意味着您关于“数据库的开销何时合理”的问题是一个没有实际意义的问题。XML总是比SQlite有更高的开销。(像MSSQL这样的满负荷数据库更重,特别是在管理开销方面,但这是一个完全不同的问题。)
取决于数据的种类和大小。如果需要扩展,请使用数据库。不要忘记,您手头有一个很棒的数据库:文件系统 许多程序员忘记了一个好的目录文件结构是:
试试看。它的速度非常快。XML非常适合存储未完全结构化的数据,您通常希望将其与另一个应用程序交换。我更喜欢使用SQL数据库来存储数据。XML很容易出错,因为您可能会由于数据本身的输入错误或遗漏而导致细微的错误。一些开源应用程序框架在配置、数据等方面使用了太多的xml文件。我更喜欢使用SQL 既然您需要一条经验法则,我想说,如果您只需要设置一次,而不需要访问/搜索太多,那么就可以使用基于XML的应用程序数据、配置等。对于活动搜索和更新,最好使用SQL 例如,web服务器将应用程序数据存储在XML文件中,您实际上不需要执行复杂的搜索,而是更新文件。web服务器启动,读取xml文件,就这样。因此,XML在这里是完美的。假设您使用了类似Struts的框架。您需要使用XML,并且一旦开发和部署应用程序,操作配置不会有太大变化。同样,XML文件是一种很好的方法。现在,如果Struts开发的应用程序允许广泛的搜索和更新、删除,那么SQL是最佳的方法 当然,您肯定会遇到组织中的一两位开发人员,他们只会高呼XML或SQL,并宣称XML或SQL是唯一的