Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在统一中保存大数据?

如何在统一中保存大数据?
EN

Game Development用户
提问于 2017-01-26 01:29:19
回答 4查看 2.8K关注 0票数 3

有人能告诉我如何为Android保存数据吗?

我有太多的数据需要保存(很多npc-敌人的数据)。另外,它应该在更新后工作:我在堆栈溢出上看到,使用BinaryFormatter,当您更新或更改类时,您的旧设置可能会因为类不再匹配而丢失。有时,由于这个原因,在读取保存的数据时会出现异常。

我还读到了关于JSON/XML的文章。如果我更改类,JSON/XML会抛出错误吗?

EN

回答 4

Game Development用户

回答已采纳

发布于 2017-02-06 00:59:03

如果我希望我的数据具有可读性,我将使用JSON。例如,使用JSON.NET,很容易为字段设置默认值或忽略未知字段。因此,如果从类中添加或删除字段,可能会失去平衡,但不会中断。

但是,什么是太多的数据呢?您是否需要在不偷工减料的情况下序列化数十亿个大型对象?如果是这样的话,JSON可能对您来说太麻烦了。但是当你说大的时候,要小心,这是一个相对的术语,我的直觉告诉我,你说的是序列化相对较少的数据。

如果它确实是大量的数据,并且不需要具有人类可读性,那么您可以使用二进制编写器。这要快得多,但如果没有来自JSON库的所有方便的函数,您需要告诉它要序列化和反序列化的字段。

票数 2
EN

Game Development用户

发布于 2018-02-12 17:07:32

短版

用方形石。真的。我知道这不仅仅是使用序列化程序的工作,但这是所有正常的android应用程序的工作方式,也是正确的方法,我将在下面解释。

有关如何做到这一点,请参见https://github.com/codecoding/SQLite4Unity3d

如果工作量太大,请使用https://github.com/jacobdufault/fullserializer签出自定义序列化

长版本

保存数据的格式与保存大型数据集的方式是正交关系。

这里有两个问题:

  • 当我保存记录时,我需要能够恢复该记录,即使与保存记录时相比,数据模型在代码中可能发生了更改。
  • 我需要保存大量的唱片,而且速度太慢了。

让我们逐一解决这些问题:

当模型更改了

反序列化

XML/json序列化程序将在一定程度上解决这个问题,但最终,如果您的数据模型发生更改,则需要使用迁移将旧数据迁移到新模式。

没有办法避免这个问题。

使用弱类型的序列化程序(例如。( json)允许您接收缺少键的空值,但最终,如果字段更改类型,则仍然会有损坏的数据。

永远不要使用BinarySerializer

这个问题的标准解决方案是使用数据库,并在每个表的基础上使用迁移迁移数据,就像在编写任何其他类型的数据库驱动程序一样。

虽然android内置了对sqlite和迁移的支持,但统一并不支持;您必须为它编写一些自定义代码。

在反序列化对象时,还可以使用自定义json反序列化器应用迁移“动态”,但是内置的JsonUtility不支持这一点;您必须使用像https://github.com/jacobdufault/fullserializer这样的自定义序列化程序

保存大数据集

现在,不管单个记录的存储格式如何,保存大型数据集的关键是分部分保存。

在sqlite中,将数据划分为每个表。

如果手动序列化,则将数据模型拆分为一系列小对象并逐一保存。

其原因是UI线程在执行诸如保存之类的缓慢操作时会阻塞。这里正确的方法是做一些逻辑上与此等价的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- Split data into records
- Show save progress indicator
- Start a coroutine
-- While there are records left to save:
--- Save a few records
--- `yield` to wait for the next frame and allow the UI to update

这是sqlite真正发光的地方;sqlite自然地被划分为表,表被划分成行。插入几行或更新几行是一个简单的原子操作,很容易分成几个部分。

手工处理序列化对象意味着手动管理包含多个不同序列化对象的文件夹;这是sqlite为您提供的全部服务。

请记住,与任何UI驱动的应用程序单块(大型、缓慢、无所不能)操作一样,不能将操作拆分到多个核上,也不能推迟;为了响应,UI线程上的任务应该定期返回控制,以避免锁定UI。有关android:https://developer.android.com/training/articles/perf-anr.html主题的更多背景信息,请参见以下内容

除非您要保存的数据量微不足道,否则使用直接序列化保存对象几乎肯定不会很好地扩展(许多统一游戏在android上都有ANR问题)。

基本上,如果你从这件事上拿走了什么,应该是这样:

  • 你真的应该投资于学习和使用sqlite,即使你使用的是android。这是你所描述的问题的“正确”解决方案。
票数 2
EN

Game Development用户

发布于 2017-01-26 02:40:11

您可以使用SQLite(如果需要键值对/Doucument数据库,可以使用UnQLite )或JSON(json包含的浪费字符较少,如果与XML相比删除其中的所有\r\n,则要小得多)。对于json,请使用以下代码:http://www.newtonsoft.com/json

票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/136377

复制
相关文章
如何在Redis中保存时间序列数据?
我们现在做互联网产品的时候,都有这么一个需求:记录用户在网站或者App上的点击行为数据,来分析用户行为。这里的数据一般包括用户ID、行为类型(例如浏览、登录、下单等)、行为发生的时间戳:
玖柒的小窝
2021/10/25
1.5K0
如何在Redis中保存时间序列数据?
TQ框架解析(三):VFP 保存数据的统一模型
书归正传。上篇预告的标题是《VFP 的基本数据处理体系》,后来想想还是现在用的标题比较好,更准确,歧义更少。
firstxinjie
2024/12/06
500
TQ框架解析(三):VFP 保存数据的统一模型
Core Data 是如何在 SQLite 中保存数据的
Core Data 是一个具备数据持久化能力的对象图框架。相同的对象图在不同的持久化存储类型中( SQLite 、XML)的数据组织结构差别较大。如果你浏览过 Core Data 生成的 SQLite 数据库文件,一定会见过其中包含不少奇怪的表和字段。本文将对这些表和字段进行介绍,或许可以换个角度帮助你解开部分疑惑,例如:Core Data 为什么不需要主键、NSManagedObjectID 是如何构成的 、保存冲突的判断依据是什么。
东坡肘子
2022/07/28
1.6K0
Core Data 是如何在 SQLite 中保存数据的
如何在大量数据中找出第2大的数字
观察继承关系可以发现TreeMap是继承SortedMap的,这就说明它是有序的.
一个架构师
2022/06/20
8960
如何在大量数据中找出第2大的数字
如何在 eNSP 上保存配置?
我们在eNSP上做网络实验的时候,如果在eNSP上添加了太多的设备完成配置,需要重启PC或者需要将配置转换到另一台PC,我们需要保存配置,否则我们必须再次进行配置,这很烦人。
网络技术联盟站
2022/03/02
1.6K0
如何在 eNSP 上保存配置?
如何在 eNSP 上保存配置?
如果不想一个一个导出设备的配置,可以在CLI界面通过命令save保存配置,然后点击工具栏上的Save/Save as按钮保存整个工程。
网络技术联盟站
2023/03/13
3.8K0
如何在 eNSP 上保存配置?
如何在PostgreSQL中更新大表
在Postgres中更新大型表并不像看起来那样简单。如果您的表包含数亿行,您将发现很难及时进行简单的操作,例如添加列或更改列类型。
蒋老湿
2019/11/06
4.8K0
如何在终端编辑文件并保存
1.这个时候如果想修改这个文件的内容,按下间键盘上的’i’键,最下方就会变成INSERT,就可以修改了
未名编程
2024/10/12
1820
如何在终端编辑文件并保存
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
可以利用UTL_FILE包,但是,在此之前,要注意设置好UTL_FILE_DIR初始化参数。
AiDBA宝典
2019/09/30
28.9K0
【DB笔试面试511】如何在Oracle中写操作系统文件,如写日志?
[翻译]Android教程-保存数据-保存文件
http://developer.android.com/training/basics/data-storage/files.html
LeoXu
2018/08/15
2.7K0
[翻译]Android教程-保存数据-保存键值对
http://developer.android.com/training/basics/data-storage/index.html
LeoXu
2018/08/15
2.6K0
pytorch中读取模型权重数据、保存数据方法总结
pytorch中保存数据策略在长时间的深度训练中有很大的作用,我们可以通过保存训练好的权重,然后等到下次使用的时候再取出来。另外我们也可以通过迁移学习使用别人训练好的数据进行训练。达到事半功百的效果。
老潘
2018/06/21
26.2K0
pytorch中读取模型权重数据、保存数据方法总结
将爬取的数据保存到mysql中
      create database scrapy (我新建的数据库名称为scrapy)
py3study
2020/01/19
3.7K0
java保存数据到session中_java session如何存取数据
java session存取数据的方法:session存数32313133353236313431303231363533e58685e5aeb931333363376461据方法:public void setAttribute(String name,String value)方法,设定指定名字的属性的值,并将它添加到session会话范围内,如果这个属性在会话范围内已经存在,则更改该属性的值。
全栈程序员站长
2022/09/14
2.7K0
如何在JavaScript中处理大量数据
在几年之前,开发人员不会去考虑在服务端之外处理大量的数据。现在这种观念已经改变了,很多Ajax程序需要在客户端和服务器端传输大量的数据。此外,更新DOM节点的处理在浏览器端来看也是一个很耗时的工作。而且,需要对这些信息进行分析处理的时候也很可能导致程序无响应,浏览器抛出错误。 将需要大量处理数据的过程分割成很多小段,然后通过JavaScript的计时器来分别执行,就可以防止浏览器假死。先看看怎么开始: function ProcessArray(data,handler,callback){ Process
CSDN技术头条
2018/02/09
3K0
如何在MySQL中搜索JSON数据
从MySQL 5.7.8开始,MySQL支持本机JSON数据类型。在本教程中,我们将学习如何在MySQL中搜索JSON数据。
Lemon黄
2020/04/14
5.4K0
如何在 Spring Boot 中 读写数据
写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:https://github.com/abel-max/Java-Study-Note/tree/master
用户5546570
2020/09/28
15.9K0
如何在 Spring Boot 中 读写数据
git命令中带有特殊符号如@
使用带用户密码clone的方式: git clone https://username:password@remote 当username和password中含有特殊符号会导致出错, 因为为http的请求,所以需要将特殊符号encode成url格式的 java使用: String c = java.net.URLEncoder.encode(".","utf-8"); System.out.println(c); 源文档 <http://blog.csdn.net/qq1142003960/article/
千往
2018/01/24
2.1K0
在Excel中处理和使用地理空间数据(如POI数据)
因为不是所有规划相关人员,都熟悉GIS软件,或者有必要熟悉GIS软件,所以可能我们得寻求另一种方法,去简单地、快速地处理和使用地理空间数据——所幸,我们可以通过Excel自带的“三维地图”功能来简单满足一些差不多够用的需求。
Sidchen
2020/08/02
10.9K0
Java读取大文本文件保存到数据库
  将文件读取到内存,效率比较高,经过测试读取1G左右的文本文件,机器内存消耗达到接近3个G,对内存消耗太大,不建议使用
sunny1009
2022/05/06
2.2K0
Java读取大文本文件保存到数据库

相似问题

如何在重新安装后保存统一数据?

30

统一保存游戏数据的最佳方法

20

“统一检查员”中的大文本

10

统一中的交互纹理修改(如旋转)

10

统一- PlayerPrefs.SetString似乎保存垃圾数据

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文