
⑴ 物理数据层。
它是数据库的最内层,是物理存贮设备上实际存储的数据的集合。这些数据是原始数据,是用户加工的对象,由内部模式描述的指令 *** 作处理的位串、字符和字组成。
⑵ 概念数据层。
它是数据库的中间一层,是数据库的整体逻辑表示。指出了每个数据的逻辑定义及数据间的逻辑联系,是存贮记录的集合。它所涉及的是数据库所有对象的逻辑关系,而不是它们的物理情况,是数据库管理员概念下的数据库。
适合存储用户会话的数据库有Redis和Memcache。
1、Redis
Redis,即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。
2、memcache
memcache是一套分布式的高速缓存系统,被许多网站使用以提升网站的访问速度,尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件,以BSD license授权发布。
适合存储用户会话的数据库特点:
这些数据库具有高速的内存读写速度,适合存储常用的数据,尤其适合存储Session等用户会话信息,可以在多个服务器之间快速共享数据。
此外,Redis还支持更多数据类型和复杂 *** 作,而Memcached则具有更高的性能表现。如果需要持久化存储用户会话数据,可以考虑使用关系型数据库MySQL等。
需要注意的是,不同的数据库适用于不同的场景,需要根据实际需求进行选择,并进行适当的配置和优化。
一般将NoSQL数据库分为四大类:键值(Key-Value)存储数据库、列存储数据库、文档型数据库和图形(Graph)数据库。它们的数据模型、优缺点、典型应用场景。
键值(Key-Value)存储数据库Key指向Value的键值对,通常用hash表来实现查找速度快数据无结构化(通常只被当作字符串或者二进制数据)内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等。
列存储数据库,以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限分布式的文件系统。
文档型数据库,Key-Value对应的键值对,Value为结构化数据,数据结构要求不严格,表结构可变(不需要像关系型数据库一样需预先定义表结构),查询性能不高,而且缺乏统一的查询语法,Web应用。
图形(Graph)数据库,图结构,利用图结构相关算法(如最短路径寻址,N度关系查找等),很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案,社交网络,推荐系统等。
1)主数据文件主数据文件简称主文件,正如其名字所示,该文件是数据库的关键文件,包含了数据库的启动信息,并且存储数据。每个数据库必须有且仅能有一个主文件,其默认扩展名为MDF。(2)辅助数据文件辅助数据文件简称辅(助)文件,用于存储未包括在主文件内的其他数据。辅助文件的默认扩展名为NDF。(3)日志文件日志文件用于保存恢复数据库所需的事务日志信息。每个数据库至少有一个日志文件,也可以有多个。日志文件的扩展名为LDF。表由行和列构成的集合,用来存储数据数据类型定义列或变量的数据类型,SQLServer提供了系统数据类型,并允许用户自定义数据类型视图由表或其他视图导出的虚拟表索引为数据快速检索提供支持且可以保证数据唯一性的辅助数据结构约束用于为表中的列定义完整性的规则默认值为列提供的缺省值存储过程存放于服务器的预先编译好的一组T-SQL语句触发器特殊的存储过程,当用户表中数据改变时,该存储过程被自动执行
用CHAR和VARCHAR都可以存储,如果是比较长的英语文章还可以用各类数据库提供的大字符类型进行储存。
CHAR类型:定长字符串 可以储存指定长度范围类得字符串,不足的用空格补齐。
VARCHAR类型:变长字符串 可以储存指定长度范围类得字符串,长度可变
android开发中sqlite3支持的数据类型:
NULL、INTEGER、REAL、TEXT、BLOB
但是,sqlite3也支持如下的数据类型
smallint 16位整数
integer 32位整数
decimal(p,s) p是精确值,s是小数位数
float 32位实数
double 64位实数
char(n) n长度字符串,不能超过254
varchar(n) 长度不固定最大字符串长度为n,n不超过4000
graphic(n) 和 char(n) 一样,但是单位是两个字符double-bytes,n不超过127(中文字)
vargraphic(n) 可变长度且最大长度为n
date 包含了年份、月份、日期
time 包含了小时、分钟、秒
timestamp 包含了年、月、日、时、分、秒、千分之一秒
对于游戏币等代币,一般存储为int类型是可行的。问题在于越界,int类型长度为11位。
在存储人民币相关的金额的时候,则只能存储到9长度的人民币,也就是说,最大只能存储999999999,不到10亿的数值,如果业务增长很快的话,就会给自己留下隐患。
Decimal:Decimal为专门为财务相关问题设计的数据类型。
DECIMAL从MySQL51引入,列的声明语法是DECIMAL(M,D)。在MySQL51中,参量的取值范围如下:M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M的默认值是10。
D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。说明:float占4个字节,double占8个字节,decimail(M,D)占M+2个字节。
如DECIMAL(5,2)的最大值为999999,因为有7个字节可用。能够解决数据的范围和精度的问题。
扩展资料
MySQL数据类型DECIMAL用法:
MySQL DECIMAL数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
要定义数据类型为DECIMAL的列,请使用以下语法:column_name DECIMAL(P,D);
在上面的语法中:
P是表示有效数字数的精度。 P范围为1〜65。
D是表示小数点后的位数。 D的范围是0~30。MySQL要求D小于或等于(<=)P。
DECIMAL(P,D)表示列可以存储D位小数的P位数。十进制列的实际范围取决于精度和刻度。
与INT数据类型一样,DECIMAL类型也具有UNSIGNED和ZEROFILL属性。如果使用UNSIGNED属性,则DECIMALUNSIGNED的列将不接受负值。
如果使用ZEROFILL,MySQL将把显示值填充到0以显示由列定义指定的宽度。另外,如果我们对DECIMAL列使用ZEROFILL,MySQL将自动将UNSIGNED属性添加到列。
/思路是把数组保存成blob格式
#include <stdioh>
#include <stdlibh>
#include <stringh>
#include "sqlite3h"
/#define DEBUG/
int main(int argc, char argv[]) {
int a[10] = {1,3,8,4,6,6,7,8,9};
int len;
len = sizeof(a[0])10;
#ifdef DEBUG
printf("%d\n",len);
#endif
sqlite3 db;
sqlite3_stmt stmt;
char sql,zErr;
int rc;
rc = sqlite3_open_v2(":memory:",&db,SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE,NULL);
if(rc){
fprintf(stderr,"%s\n",sqlite3_errmsg(db));
return rc;
}
rc = sqlite3_exec(db,"create table if not exists test(array blob);",NULL,NULL,&zErr);
if(rc != SQLITE_OK){
fprintf(stderr,"%s\n",zErr);
sqlite3_free(zErr);
sqlite3_close(db);
return rc;
}
sql = "insert into test values();";
sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,NULL);
sqlite3_bind_blob(stmt,1,a,len,SQLITE_STATIC);
sqlite3_step(stmt);
sqlite3_reset(stmt);
sql = "select from test;";
sqlite3_prepare_v2(db,sql,strlen(sql),&stmt,NULL);
sqlite3_step(stmt);
len = sqlite3_column_bytes(stmt,0);
int data = malloc(len);
memcpy(data,sqlite3_column_blob(stmt,0),len);
sqlite3_finalize(stmt);
sqlite3_close(db);
#ifdef DEBUG
printf("%d\n",sizeof(a[0]));
#endif
int i = 0;
while(i<(len/sizeof(a[0]))){
printf("a=%d, data=%d\n",a[i],(data+i));
i++;
}
system("pause");
return 0;
}
以上就是关于按照存储内容的不同,数据库分为哪几类全部的内容,包括:按照存储内容的不同,数据库分为哪几类、适合存储用户会话的数据库、nosql数据库的四种类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)