一、数据的分类

数据的分类:无序数据、半结构化数据、结构化数据

问题:同类型的数据,有什么例子?比如哪些数据是无序数据,哪些数据是半结构化数据,哪些数据是结构化数据?

在实际应用中,我们会遇到各式各样的数据库如nosql非关系数据库(memcached,redis,mangodb),RDBMS关系数据库(oracle,mysql等),还有一些其它的数据库如hbase,在这些数据库中,又会出现结构化数据,非结构化数据,半结构化数据,下面列出各种数据类型

1.结构化数据

能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号。传统的关系数据模型、行数据,存储于数据库,可用二维表结构表示。

2.半结构化数据

所谓半结构化数据,就是介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,XML、HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。

3.非结构化数据

非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)。

非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等

二、不同数据的不同存储方法

对于不同类型的数据,一般使用什么方法来存储,原则如下:

1.结构化数据使用数据库存储

2.半结构化数据(配置信息)使用文本或者属性值保存

3.无序数据(log信息)使用文件保存

三、Android应用的数据存储方法

对于android系统,可以使用系统自带的存储方法。请问在android系统当中,有哪些存储的方法呢?

Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、Content Provider和File。由于Android系统中,数据基本都是私有的的,都是存放于“data/data/程序包名”目录下,所以要实现数据共享,正确方式是使用Content Provider。

(1)SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。

(2)SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。

(3)File: 即常说的文件(I/O)存储方法,常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。

(4)ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。

四、Android系统的数据存储方法

(1)Android Properties

(2)Android系统的默认值

(3)Android log信息存储

五、嵌入式系统OpenWRT数据存储方法

UCI是Unified Configuration Interface的缩写,翻译成中文就是统一配置接口,用途就是为OpenWrt提供一个集中控制的接口。OpenWrt实现的这个工具,能够让你的不管是Lua还是PHP程序,或者SHELL程序或C程序,只要执行命令传输参数就能达到修改系统参数的目的,请参考本文后面的命令行实用工具。

系统的配置应该简单直接,UCI的设计初衷即是这样的,它是NVRAM-based配置方法的继承者(基于NVRAM的配置方法起源于OpenWrt的White Russian系列,该版本目前不再更新,最后发布于2007年,版本号为0.9)。UCI可以视为OpenWrt系统功能设置的主要用户配置接口,通常来说这些配置与系统的功能关联性较大,想像一样我们平常所使用的路由器或嵌入式设备中的WEB界面中的那些配置项,就是路由器或嵌入式设备系统所集成了的功能。常见的例子如路由器的网络接口设置,无线参数设置,logging设置和远程登录设置等。

六、自定义分区存储数据

1.如何自定义分区?

2.分区的大小是多少?

3.如何存储数据,使用文件,还是数据库?

4.数据的读写接口需要提供给上层应用,以便于它们进行调用

5.数据缓存的问题,比如写入某一个数据后马上断电,这个时候数据实际没有保存到分区当中,造成了数据丢失

参考资料

1.Android Properties见https://developer.android.com/reference/java/util/Properties.html

2.文章《Android 系统属性SystemProperty分析》见http://www.cnblogs.com/bastard/archive/2012/10/11/2720314.html

3.《智能路由器开发指南》

4.UCI使用方法见https://wiki.openwrt.org/doc/uci

5.UCI技术见https://wiki.openwrt.org/doc/techref/uci#usage_outside_of_openwrt

results matching ""

    No results matching ""