因此,我们所使用的应用程序称为所有主要运营商(UPS,FedEx等)的API,用于跟踪数据。
我们在数据库的表格的TEXT字段中保存最新版本的XML Feed。
我们几乎没有(阅读,从未到目前为止)访问这些数据,但是“以防万一。”
它为数据库增加了相当多的额外权重。现在,一个200,000行的表格大约在500MB左右......其中绝大多数都被所有XML数据所破坏。
那么存储所有XML数据的方法是否更有效?我曾考虑将它们保存为实际的text / xml文件,但是我们每隔几个小时更新一次数据,所以不确定这样做是否有意义。
答案 0 :(得分:10)
假设它的数据没有特别的理由不将它保存在您的数据库中(除非它阻碍了您的备份)。但是将它保存在与您需要定期读取的实际数据分开的表中是一个好主意 - 只需要XML,FK回到原始表,可能还有自动编号的PK列。
答案 1 :(得分:4)
根据我的经验,TEXT / BLOB列一直很大的最大问题是人们在扫描多行时不小心阻止读取它们。在MyISAM上,这将浪费你的VFS缓存,而在InnoDB上,它将浪费你的InnoDB缓冲池。
第二个问题是随着表变得越来越大,它们变得越来越难以维护。添加列或索引可以重建整个表,而500MB表比5MB表重建速度慢很多。
我已经取得了很好的成功,将这样的事情转移到了离线键/值存储,例如MogileFS和/或TokyoTyrant。
如果您不需要疯狂扩展,或者您必须重视事务一致性而不是性能,那么只需将此列移动到与原始表具有1:1关系的另一个表中,至少需要一个连接才能爆发缓冲池,并允许您维护原始表格,而不必在500MB大猩猩周围趾尖。
答案 2 :(得分:3)
如果它真的未使用,请尝试:
的/ dev / null的
答案 3 :(得分:3)
我不知道这些XML流包含哪种数据,但是你可以解析它并只在表或一组表中存储相关信息,这样你就可以消除一些XML的膨胀。
答案 4 :(得分:0)
由于DATAbase旨在存储DATA,因此这似乎是它的合理位置。几点建议:
不是将其存储在单独的表中,而是使用单独的数据库。如果信息不重要
查看compress和解压缩函数,因为这可能会减少详细XML的大小。
我参与了一个项目,我们在数据库和文件系统之间分割数据。在这次经历之后,我再也没有发誓。各种生产/测试/开发环境的备份和维护变成了一场噩梦。
答案 5 :(得分:0)
了解OLAP技术和数据仓库。他们可能就是你在寻找什么。
答案 6 :(得分:0)
为什么不将它们存储到文本文件中,并且它们在数据库中保留一个简单的路径(或相对路径)?
我们曾经在地震行业做过类似的事情,其中大部分数据都是浮点数的大数组。将这些作为文件存储在磁盘(或磁带)上的效率要高得多,然后只将跟踪元数据(位置/等)保存在类似RDBMS的数据库中(我大约在他们移植到Oracle的时候!)。即使使用旧系统,现场数据也始终在磁盘上并且易于访问 - 它的使用频率高于阵列数据(尽管与您的情况不同,这绝对是必不可少的!