将数据保存在XML或数据库中更好吗?

本文关键字:更好 数据库 数据 保存 存在 XML | 更新日期: 2023-09-27 18:04:08

我们开发了一款航空模拟游戏,我们目前的结构将用户数据保存在XML文件中(以及所有游戏数据,如机场统计,飞机信息等)。

在性能和功能方面,在本地机器上存储这些数据的最佳方式是什么?我听到了双方的一些观点,但没有真正具体或有实例支持的答案。虽然我们的原始数据xml较小(150KB),但保存的游戏相当大(3-10MB),并且跨越数千行或多或少无组织的数据。

想法、建议或推荐?

将数据保存在XML或数据库中更好吗?

如果你不需要能够手工编辑文件,你可以尝试使用BinaryFormatter来序列化&反序列化您的数据,应该比XmlSerializer快得多。

下面是如何使用它的一个例子。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApplication2
{
    [Serializable()]
    public class Child
    {
        public string Property1 { get; set; }
    }
    [Serializable()]
    public class TestClass
    {
        public int Property1 { get; set; }
        public string Property2 { get; set; }
        public DateTime Property3 { get; set; }
        public Child Child { get; set; }
    }

    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            TestClass testClass = new TestClass()
            {
                Property1 = 1,
                Property2 = "test",
                Property3 = DateTime.Now,
                Child = new Child()
                {
                     Property1 = "test", 
                }
            };
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            System.IO.MemoryStream memoryStream = new System.IO.MemoryStream();
            formatter.Serialize(memoryStream, testClass);
            memoryStream.Position = 0;
            TestClass deserialized = formatter.Deserialize(memoryStream) as TestClass;
        }
    }
}

如果您将数据保存在XML文件中,则考虑使用XML数据库,如Oracle BerkleyDB XML/BaseX/Sedna。您可以使用DB API进行数据操作,也可以使用XQuery查询该XML。伯克利DB XML数据库性能良好。

如果你的用户数据、机场统计数据等有行与行不同的信息,你也应该使用XML数据库

如果你的数据模型结构良好,那么你可以使用像MySql或PostGreSql这样的开源数据库来处理你所有的数据。

在这里,两者都可以很好地满足您对数据添加/更新的预期数据库大小。在选择数据存储库类型时,应该考虑您的数据模型。

如果您选择XML数据库,您的数据访问/保存代码可能会被重用。

如果你选择RDBMS,你应该为你的应用层编码。

希望,这一见解和进一步的研究将对你有所帮助。