Xml 或 Sqlite,何时删除数据库的 Xml? [关闭]

2023-12-08

我真的很喜欢 Xml 来保存数据,但是 sqlite/database 什么时候成为更好的选择?例如,当 xml 超过x项或大于y MB?

我正在编写一个 RSS 阅读器,我相信我在使用 xml 而不是 sqlite 数据库来存储缓存时做出了错误的选择all提要项目。有些提要在一个月后的 xml 文件大小约为 1mb,另一些则有超过 700 个项目,而大多数提要只有约 30 个项目,并且在一个月后大小约为 50kb。several几个月。

我目前没有计划实施上限,因为我喜欢能够搜索所有内容。

所以,我的问题是:

  1. 什么时候 sqlite/数据库的开销比使用 xml 更合理?
  2. Are the 一些大的 xml 文件当存在时,数据库有足够的理由很多小那些,尽管即使是很小的也会随着时间的推移而长大? (沿着long time)

updated(更多信息)

每次在 GUI 中选择 feed 时,我都会重新加载该 feeds xml 文件中的所有项目。

我还需要修改已读/未读状态,当我循环遍历 xml 中的所有节点以查找该项目,然后将其设置为已读/未读时,这看起来确实很麻烦。


伙计,我有这方面的经验吗?我从事的一个项目最初使用 XML 存储所有数据,然后迁移到 SQLite。每种技术都有很多优点和缺点,但正是性能导致了这种转变。这是我们观察到的情况。

对于小型数据库(几兆或更小),XML 速度更快,并且更容易处理。我们的数据自然采用树格式,这使得 XML 更具吸引力,并且 XPath 允许我们在一行简单的代码中执行许多查询,而不必沿着祖先树走下去。

我们在 Win32 环境中进行编程,并使用标准的 Microsoft DOM 库。我们将所有数据加载到内存中,将其解析为 DOM 树,并在内存副本上搜索、添加、修改。我们会定期保存数据,并且需要轮换副本,以防机器在写入过程中崩溃。

我们还需要使用 C++ 树图手动构建一些“索引”。当然,这对于 SQL 来说是微不足道的。

请注意,文件系统上的数据大小比“内存中”DOM 树小 2-4 倍。

当数据达到 10M-100M 大小时,我们开始遇到真正的问题。有趣的是,对于所有数据大小,XML 处理都比 SQLite 快得多(因为它在内存中,而不是在硬盘上)!问题实际上有两个:首先,加载时间确实开始变长。在数据存入内存并构建地图之前,我们需要等待一分钟左右。当然,一旦加载程序就非常快。第二个问题是所有这些内存一直都被占用。即使我们运行得非常快,只有几百兆的系统在其他应用程序中也会没有响应。

我们实际上正在研究使用基于文件系统的 XML 数据库。有几个开源版本的 XML 数据库,我们尝试过。我从未尝试过使用商业 XML 数据库,所以我无法对它们发表评论。不幸的是,我们根本无法让 XML 数据库正常工作。甚至用数百兆 XML 填充数据库的操作也需要几个小时……也许我们使用得不正确。另一个问题是这些数据库非常重量级。他们需要 Java 并拥有完整的客户端服务器架构。我们放弃了这个想法。

然后我们发现了 SQLite。它解决了我们的问题,但付出了代价。当我们最初插入 SQLite 时,内存和加载时间问题就消失了。不幸的是,由于所有处理现在都在硬盘上完成,因此后台处理负载大幅增加。虽然之前我们从未注意到 CPU 负载,但现在处理器使用率大幅上升。我们需要优化代码,并且仍然需要在内存中保留一些数据。我们还需要将许多简单的 XPath 查询重写为复杂的多查询算法。

以下是我们所学到的内容的总结。

  1. 对于树数据,使用 XPath 查询和修改 XML 更加容易。

  2. 对于小型数据集(小于 10M),XML 的性能远远超过 SQLite。

  3. 对于大型数据集(大于 10M-100M),XML 加载时间和内存使用成为一个大问题,甚至导致某些计算机无法使用。

  4. 我们无法获得任何开源 XML 数据库来解决与大型数据集相关的问题。

  5. SQLite 没有 XML DOM 的内存问题,但它处理数据的速度通常较慢(它在硬盘上,而不是在内存中)。 (注意 - SQLite 表可以存储在内存中,也许这会让它变得更快......我们没有尝试这个,因为我们想从内存中获取数据。)

  6. 在表中存储和查询树数据并不令人愉快。然而,管理事务和索引可以部分弥补这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xml 或 Sqlite,何时删除数据库的 Xml? [关闭] 的相关文章

  • 使用单引号和双引号对 XPath 表达式进行编码

    XPath v1 不包含对表达式进行编码的方法 如果只有单引号或双引号 则可以使用诸如 review name Bob s Pizza review name Pizza Pam 但是如果你两者都有 例如 Fred s Fancy Pizz
  • SQLite 连接在 C# 中不起作用

    我正在使用操作 SQLite 数据库的 C 应用程序 直到昨天它工作正常 它正在检索记录 但从昨晚开始 连接字符串返回 Data Source null 下面是测试代码 using System using System Collectio
  • Laravel 插入三向数据透视表

    Summary 我正在构建音乐发现服务 我的问题是 如何将数据插入三向数据透视表 标签 跟踪 用户 Schema 我看到了这个架构在 LaravelSD http www laravelsd com share WNmzz8 它由六个主表
  • 按钮 Onclick 调用 Javascript,后者调用 PHP 文件,该文件添加到 Mysql 数据库

    我需要添加到数据库的帮助 我想从按钮单击方法调用 javascript scrt Javascript 脚本 我想调用一个 php 文件 其中包含一些添加到 MySQL 数据库的代码 我确实尝试了 20 多个网站 但没有任何帮助 如果 AJ
  • PHP中通过Hive/Thrift查询数据库不起作用

    我正在尝试通过 PHP 中的 Hive Thrift 查询数据库 但是 我不断收到错误 TSocket timed out reading 4 bytes from XYZ 我正在使用来自的代码 https cwiki apache org
  • 如何让MySQL数据库完全在内存中运行?

    我注意到我的数据库服务器支持内存数据库引擎 我想让一个已经运行 InnoDB 的数据库完全在内存中运行以提高性能 我怎么做 我探索了 PHPMyAdmin 但找不到 更改引擎 功能 假设您了解注释中提到的使用 MEMORY 引擎的后果 并且
  • Jaxb 2.0 模式验证问题

    我正在使用 Jaxb 2 x 并尝试使用以下教程使用给定的 XSD 验证 XML 文档 教程链接 http bdoughan blogspot com 2010 11 validate jaxb object model with xml
  • 使用 Javascript/JQuery 进行 XML/XSL 转换

    谁能告诉我是否有一种方法可以在客户端使用 Javascript 或 JQuery 进行 XML XSLT 转换 这种方法适用于所有主要浏览器 Chrome Safari Firefox 和 IE 谢谢 我应该从一开始就声明我编写了这个脚本
  • 使用 Python Unescape _xHHHH_ XML 转义序列

    我正在使用 Python 2 x 不可协商 读取 XML 文档 由其他人创建 这些文档允许许多元素的内容通过使用转义来包含不是有效 XML 字符的字符 xHHHH 公约例如ASCII BEL 又名 U 0007 由 7 个字符序列表示u x
  • 有效存储和查询 GPS 坐标

    我想创建一个大型 GPS 坐标数据库 可以通过 返回 此坐标 n 米范围内的所有坐标 来查询该数据库 我需要它尽可能高效 因此循环遍历数据库中的所有坐标并计算坐标是否在 n 米内并不是理想的解决方案 有更简单的解决方案吗 Thanks 我通
  • 使用 python 元素树从 xml 在 Excel 工作表中创建子表

  • setContentView 上的另一个资源$NotFoundException

    Stack Overflow 上有很多 Resources NotFoundException 问题 我已经查看了它们并尝试了各种建议 但均无济于事 我有一个完美的工作布局来显示一些图形 下面有一些按钮 我修改了一些按钮并开始出现此错误 我
  • 半透明数据库

    我正在构建一个包含健康信息的应用程序 这个面向消费者的应用程序对我来说是新的 我想要一种方法来完全消除隐私问题 当我回顾保护可公开访问的数据库中的敏感数据的方法时 我经常遇到数据库半透明的概念 有原书 http www wayner org
  • C# 中的高级替换

    我喜欢用 C 替换 xml 字符串 中的一些属性 示例 XML
  • 浏览器关闭后从数据库中删除

    我正在开发一个电子商务应用程序 但问题是 当用户将产品添加到购物车并在订购前关闭浏览器时 购物车会带走所有产品 所有购物车项目都保存在表中 如果用户关闭浏览器而不订购 我只想刷新购物车 您可以使用 Javascript 事件捕获浏览器关闭并
  • 保存用户的身高和体重

    我应该如何将用户的身高和体重存储在MySQL数据库中 以便我可以使用这些信息来查找特定身高或体重内的用户 另外 我需要能够以英制或公制显示此信息 我的想法是存储以厘米为单位的身高和以公斤为单位的体重信息 我更喜欢公制而不是英制 我什至可以让
  • 如何查找具有给定名称的最高级别后代

    我正在寻找一种使用 linq 在 XML 树中查找第一个结果级别的方法 我的 XML 如下所示
  • 如何将文档类型添加到 XDocument?

    我有一个现有的 XDocument 对象 我想向其中添加 XML 文档类型 例如 XDocument doc XDocument Parse a test a 我可以使用以下命令创建 XDocumentType XDocumentType
  • Django:将博客条目查看次数增加一。这有效率吗?

    我的索引视图中有以下代码 latest entry list Entry objects filter is published True order by date published 10 for entry in latest ent
  • XPATH / XSLT:选择父节点的属性与另一个节点的属性匹配的节点

    我正在尝试使用 XPath 和 XSLT 对以下 XML 进行转换

随机推荐

  • 为什么在销毁对象后使用该对象时没有收到异常?

    下面的代码工作得很好 但它不应该 当我单击 Button1 时 该对象首先被销毁 然后使用其值 并且我没有收到任何访问冲突或其他内容 更重要的是 乘法运算给出了正确的结果 这证明了Obj1没有被毁掉 但话又说回来 这也不是真的 因为当我关闭
  • 将 fileChooserParams 中的 mime 类型转换为 Intent.setType 的正确格式

    我正在尝试使用 Android 中的 WebView 上传文件 This is the code in use TargetApi Build VERSION CODES LOLLIPOP Override public boolean o
  • 在局部变量的嵌套函数内部使用“get”

    我从来没有完全理解嵌套函数和通过引用传递参数 我的策略通常是做类似的事情get variabletopassbyreference 在子函数内部来完成此操作 到目前为止 我一直将全局变量传递给函数 并且效果很好 今天 我尝试在函数内创建局部
  • 使用 JavaScript 将 Excel 转换为 PDF

    如何自动将 Excel 文档 文件 转换为 PDF 我正在尝试调整找到的解决方案here脱颖而出 到目前为止我有这个 var fso new ActiveXObject Scripting FileSystemObject var docP
  • 禁用 freemarker 日志

    我正在使用 Struts 2 0 11 2 但我不知道我的应用程序最近发生了什么变化 我收到了大量的 freemarker 日志 DEBUG 13201 freemark template simple hidden ftl en UTF
  • 如何将 LaTeX/amsmath 与 matplotlib 一起使用?

    当我尝试在 matplotlib 中使用 LaTeX amsmath 包时 出现了一系列难以理解的错误 有没有人能够让这样的事情发挥作用 如果是这样 我很想看一个例子 这是我尝试过的 import matplotlib from matpl
  • iPhone 上的 UIPopoverPresentationController 不产生弹出窗口

    我正在尝试实施新的UIPopoverPresentationController在我的 iPhone 应用程序中 使用 Objective C 我想要的是一个简单的弹出窗口 其中包含从启动按钮发出的表格视图 Edit 这是我的REVISED
  • Python 3.4.0 与 MySQL 数据库

    我已经安装了Python版本 3 4 0我想做一个使用 MySQL 数据库的项目 我下载并尝试安装MySQLdb 但对于这个版本的 Python 来说并不成功 有什么建议可以解决这个问题并正确安装吗 MySQLdb 不支持 Python 3
  • 为什么这个内存地址 %fs:0x28 ( fs[0x28] ) 有一个随机值?

    我编写了一段 C 代码 并将其反汇编并读取寄存器以了解程序在汇编中的工作原理 int test char this char sum buf 6 strncpy sum buf this 32 return 0 我一直在检查的代码片段是测试
  • Python:使用 isin 或 wkn 调用 pandas_datareader 或将其转换为股票代码?

    我有一份包含 ISIN 和 WKN 编号的股票清单 我的目标是使用 pandas datareader 获取该股票的历史数据 我的问题是 该功能例如 import pandas datareader as web stock web Dat
  • Android HttpPost:如何获取结果

    我一直在尝试发送 HttpPost 请求并检索响应 但即使我能够建立连接 我仍然不知道如何获取请求响应返回的字符串消息 HttpClient httpclient new DefaultHttpClient HttpPost httppos
  • 在 PHP 中从 MySQL 创建下拉菜单?

    我对 PHP 和 MySQL 有一定的经验 所以我有点掌握了一些东西 但是我有点试图得到一些可能超出我水平的东西 不太确定这方面的难度级别 基本上 我希望创建 2 个下拉菜单来删除 MySQL 表中用户的访问权限 因此 第一个下拉菜单将用于
  • solr 评分 - fieldnorm

    当我搜索 iphone 时 我有以下记录和分数 记录1 字段名称 显示名称 Iphone FieldName 名称 Iphone 11 654595 MATCH sum of 11 654595 MATCH max plus 0 01 ti
  • 在全屏 3D 应用程序中获取桌面屏幕截图

    使用全屏 3D 应用程序 例如游戏 时是否可以将桌面渲染为屏幕截图 或者游戏运行时Windows会关闭渲染引擎吗 我正在寻找将桌面渲染为游戏中纹理的方法 类似 RDP 的协议可以作为解决方案吗 编辑 为了澄清 是否有任何深层 API 机制可
  • 如何从 TOleContainer 中提取图元文件?

    我有一个带有 TOleContainer 控件的 Delphi BDS 2006 应用程序 它内部有一个 OLE 对象 即 MS Office 2003 中的 MS Equation 公式 名称 Equation 3 如何从公式图像中提取矢
  • 在 C++ 中使用 istringstream

    我有一些代码利用 fork execlp 和 wait 来创建两个进程 目标是能够重复打印提示并让用户输入最多包含 4 个参数 选项的命令 int main string command argument istringstream iss
  • 什么是静态工厂方法?

    什么是 静态工厂 方法 The 静态工厂方法模式是一种封装对象创建的方法 如果没有工厂方法 您只需调用该类的构造函数直接地 Foo x new Foo 使用这种模式 您可以调用工厂方法 Foo x Foo create 构造函数被标记为私有
  • 如何避免 SQL 中 INSERT 的重复值?

    我有一张表 名为 Delegates 该表有四个字段 ID Auto increment Primary MemberNo FromYr ToYr 我用这个查询插入 INSERT INTO Delegates MemNo FromYr To
  • 即使可用堆内存远大于已用内存,也会出现堆内存不足的情况

    即使我使用以下命令运行具有高堆内存的节点 也会收到以下错误 node max old space size 8000 manipulateFiles js FATAL ERROR invalid table size Allocation
  • Xml 或 Sqlite,何时删除数据库的 Xml? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我真的很喜欢 Xml 来保