常见的数据库应用及应用场景
2016-08-22 12:53
253 查看
> 数据库与数据存储:
理解关系型数据的用处,如SQL。
学习NoSQL数据库,如MongoDB。
理解在特定场合哪一种更合适。
了解如何使用你选择的后台语言(如Node.js + MongoDB)连接一个数据库。
理解诸如Redis和memcached等内存数据存储的长处。
web存储保存sessions, cookies和浏览器中缓存的数据。
可伸缩数据库,ACID和ORM(都是可选的)。
> 数据库事务的四大特性(ACID):原子性(Atomicity);一致性(Consistency);分离性(Isolation);持久性(Durability);
保证事务的原子性是分布式事物的最大难点,在分布式环境下,保证事务原子性主要有两种方案,一种是在提交命令发出后不回滚,尽可能保证提交成功;另一种是在提交命令发出后,根据响应结果判断是提交成功还是该进行回滚。
事务的一致性
在单机数据库事务中,事务的一致性是指事务的任何操作都不会使得数据违反数据库定义的约束、触发器等规则。在分布式数据库中,由于数据分布在不同节点,有些约束难以保证,比如主键和唯一性约束,中信银行当前实现的版本未从数据库本身保证该约束的完整性,只能从使用规范角度进行约束,由应用保证主键和唯一索引的全局唯一性。
事务的隔离性
事务隔离性的本质就是如何正确处理读写冲突和写写冲突,这在分布式事务中又是一个难点,因为在我们的分布式事务控制方案中,可能会出现提交不同步的现象,这个时候就有可能出现“部分已经提交”的事务。一旦并发应用访问“已经提交”节点中的数据,就需要根据GTID的状态来判断是“部分提交”还是“全部提交”,否则就出现了分布式数据库中特有的一种“脏读”。因此GTID方案可以确保分布式事务的隔离性。
事务的持久性
和单机一样,分布式事务也需要保证事务的持久性,通过单节点数据的持久化和全局事务状态的持久化来完成,数据的持久化由单节点数据库保证,全局事务状态的持久化由全局事务管理器负责,全局事务管理器采用定时全量和实时增量方式实现事务状态的持久化:将GTID申请和释放的动作实时写到磁盘,同时每隔一定时间将全局事务管理中的活跃GTID列表以异步方式写到磁盘,通过定时的全量活跃GTID列表和实时的增量记录,可以获得任意时刻的活跃GTID列表。
1.数据库触发器:CREATE TRIGGER trig_stu_update ON student FOR UPDATE AS begin end; CREATE TRIGGER trig_stu_delete ON student FOR DELETE AS begin end;
2.数据库复合索引(聚集、非聚集索引、唯一索引、复合索引、系统自建索引):创建复合索引应当包含少数几个列,并且这些列经常在select查询里使用。
聚集、非聚集索引、唯一索引、复合索引、系统自建索引- http://sunct.iteye.com/blog/1933511
单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。 用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。
同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,如果不特殊说明的话一般是指单一索引。宽索引也就是索引列超过2列的索引。
设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效。拥有更多的窄索引,将给优化程序提供更多的选择余地,这通常有助于提高性能。
3.数据库的数据源组件:
数据源控件包括那些所有实现 IDataSource 接口的控件。.NET Framework 包含以下数据源控件:
SqlDataSource:连接到任意 ADO.NET 数据提供程序的数据源。
ObjectDataSource:连接到自定义的数据访问类。(这是大型专业 Web 应用程序倾向使用的数据源控件)
AccessDataSource:连接到 Access 数据库文件。用于小型网站,更好的小范围数据解决方案是使用免费的 SQL Server Express。
XmlDataSource:连接到 XML 文件。
SiteMapDataSource:连接到描述站点导航信息的 web.sitemap 文件。
--------------------------------------
> SQL基础及提高:
常用SQL语句大全总结- http://blog.csdn.net/wanghong5211/article/details/68687004
SQL语句的CRUD-- http://www.cnblogs.com/cunkouzh/p/5588319.html
数据库- http://blog.csdn.net/x359981514/article/category/1269503
Android Cursor用法 - http://blog.csdn.net/baohanqing/article/details/19244911
数据库MariaDB(腾讯推广的)- https://github.com/MariaDB/server/pull/246
SQL 基本知识- http://www.cnblogs.com/doubleyong/p/4312843.html
SQL关键字总结- http://www.cnblogs.com/ProgrammerGE/archive/2010/10/29/1864769.html
Sql语句常用关键字- http://blog.csdn.net/kenkao/article/details/4688336
SQL的多表操作- http://www.cnblogs.com/showonce/p/5947768.html
15 个常用的 SQL Server 高级语法- http://www.codeceo.com/article/15-sql-server-grammer.html
> SQLite (Android/iOS) -- 主流的Sqlite数据加密技术就是sqlitecipher
Android:SQLlite数据库操作最详细解析- http://www.jianshu.com/p/8e3f294e2828 https://github.com/Carson-Ho/DataBase_Demo
Android SQLite分页查询的三种方法- http://blog.csdn.net/lu1024188315/article/details/51734514
SQLite基本操作加数据库分页查询- http://blog.csdn.net/xfks55/article/details/6524792
Android 通过反射让SQlite建表如此简单--http://blog.csdn.net/nugongahou110/article/details/46926345
- ORM对象关系映射之使用GreenDAO进行CRUD操作- http://blog.csdn.net/u010687392/article/details/48444417
Android ORM 框架之 greenDAO 使用心得 http://www.open-open.com/lib/view/open1438065400878.html
GreenDAO数据库版本升级-http://blog.csdn.net/fancylovejava/article/details/46713445
数据库升级 http://blog.csdn.net/crystalddd/article/details/37742021
db.execSQL(CREATE_TEMP_USER); //第一步将旧表改为临时表
db.execSQL(CREATE_USER); //第二步创建新表(新添加的字段或去掉 的字段)
db.execSQL(INSERT_DATA); //第三步将旧表中的原始数据保存到新表中以防遗失
db.execSQL(DROP_USER); //第四步删除临时备份表
Sqlite分页查询语句:select * from users order by id limit 10 offset 0 ,offset代表从第几条记录“之后“开始查询,limit表明查询多少条结果,
分页查询 limit(int): 限制查询的数量; offset(int): 每次返回的数量;
第三方资源收集(GitHub)及SDK集成(GreenDao的升级和使用)- http://blog.csdn.net/shareus/article/details/52319945
/**
* GreenDao中对SQLite的分页查询
* 查询时默认是加了可重入锁,不用加synchronized
*
* @param page 需要查询的当前页
* @return
*/
public List<Collection> getDataWithPage(int page) {
List<Collection> ls = new ArrayList<Collection>();
ls = session.getCollectionDao().queryBuilder().offset((page - 1) * 10).limit(10).list();
return ls;
}
提升SQL性能的8点整理和建议- http://blog.csdn.net/huangwenyi1010/article/details/70799810
Android SQLite分页查询的三种方法- http://blog.csdn.net/lu1024188315/article/details/51734514
Sqlite数据库分页查询(ListView分页显示数据)- http://www.tuicool.com/articles/FNnAnub
> 数据库升级:增加表或增加字段,(删除表,删除字段)
SQLite数据库--升级数据库最佳操作- http://www.jianshu.com/p/4da13b38c1db
Sqlite数据库,增删改查,升级和事物- http://blog.csdn.net/ht1063899049/article/details/53643804
Android Sqlite 数据库版本更新- http://blog.csdn.net/long704480904/article/details/41325655
GreenDAO3.0 带数据库升级 demo-- http://download.csdn.net/download/flybamboo/9660390
GreenDao生成数据库模型代码依赖jar- http://download.csdn.net/detail/fancylovejava/8859203
GreenDaoUpgradeHelper- https://github.com/yuweiguocn/GreenDaoUpgradeHelper
> 官方下载最新版本:http://sqlcipher.net/ , https://github.com/sqlcipher/android-database-sqlcipher.git
SQLCipher项目代码 下载地址:https://github.com/sqlcipher/sqlcipher
> 1、为跨平台数据库引擎 SQLite 实现加密扩展 https://sites.google.com/site/notegainexp/sqlite/weikuapingtaishujukuyinqingsqliteshixianjiamikuozhan
2、SQLite加密--SQLCipher http://stormzhang.github.io/blog/2013/06/16/sqlite-encrypt/
> IOS官方的地址-- http://sqlcipher.net/ios-tutorial/ http://blog.csdn.net/kuai0705/article/details/8931996
SQLCipher和OpenSSL项目的框架代码都是开放的源代码
OpenSSL库-- https://www.openssl.org/ http://www.openssl.org/source/(稳定版本)
sqlite加密-SQLCipher http://blog.csdn.net/zhaopenghhhhhh/article/details/37698405
--------------------------------------------------------------------------
> orcale,orcale性能调优
58怎么玩数据库架构(upyun架构与运维大会速记):
http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=403369608&idx=1&sn=48c56d64c2b5c27fed795219e7ba214a&scene=21#wechat_redirect
Oracle表分区详解(优缺点)-http://m.blog.csdn.net/feiyu84/article/details/6430512?ref=myread
Oracle的官方博客- https://blogs.oracle.com/theaquarium/
> MySQL
管理SQL Server AlwaysOn(1)——基础维护- http://blog.csdn.net/dba_huangzj/article/details/56666845
腾讯云技术大牛教你,MySQL内核深度优化- http://blog.csdn.net/qcloudcommunity/article/details/61915605
MySQL有两种常见的复制方案,异步复制和半同步复制。
微信高可用分布式数据库PhxSQL设计与实现- http://geek.csdn.net/news/detail/192400
PhxSQL架构和实现- https://github.com/tencent-wechat/phxpaxos
Proxy的协程模型使用开源的Libco库。Libco库是微信团队开源的一个高性能协程库- https://github.com/tencent-wechat/libco
MySQL主要有三个组件:连接/线程处理、MySQL Server层、存储引擎层:
最上层主要进行连接处理、授权认证、安全等;
第二层包括查询解析、分析、优化(这三个是解决问题最关心的)、缓存管理、所有内置函数、存储过程、触发器、视图,似乎扯得有点远;
第三层包含了主要的存储引擎层,MySQL Server层(第二层)通过“存储引擎API”向存储引擎层存储和提取数据,此层主要是数据存储相关。
MySQL百万级、千万级数据多表关联SQL语句调优- https://mp.weixin.qq.com/s/bZYb4w9vpf1jspYsZvpLwQ
> DB2
> SQLServer
<未完待续>
理解关系型数据的用处,如SQL。
学习NoSQL数据库,如MongoDB。
理解在特定场合哪一种更合适。
了解如何使用你选择的后台语言(如Node.js + MongoDB)连接一个数据库。
理解诸如Redis和memcached等内存数据存储的长处。
web存储保存sessions, cookies和浏览器中缓存的数据。
可伸缩数据库,ACID和ORM(都是可选的)。
> 数据库事务的四大特性(ACID):原子性(Atomicity);一致性(Consistency);分离性(Isolation);持久性(Durability);
保证事务的原子性是分布式事物的最大难点,在分布式环境下,保证事务原子性主要有两种方案,一种是在提交命令发出后不回滚,尽可能保证提交成功;另一种是在提交命令发出后,根据响应结果判断是提交成功还是该进行回滚。
事务的一致性
在单机数据库事务中,事务的一致性是指事务的任何操作都不会使得数据违反数据库定义的约束、触发器等规则。在分布式数据库中,由于数据分布在不同节点,有些约束难以保证,比如主键和唯一性约束,中信银行当前实现的版本未从数据库本身保证该约束的完整性,只能从使用规范角度进行约束,由应用保证主键和唯一索引的全局唯一性。
事务的隔离性
事务隔离性的本质就是如何正确处理读写冲突和写写冲突,这在分布式事务中又是一个难点,因为在我们的分布式事务控制方案中,可能会出现提交不同步的现象,这个时候就有可能出现“部分已经提交”的事务。一旦并发应用访问“已经提交”节点中的数据,就需要根据GTID的状态来判断是“部分提交”还是“全部提交”,否则就出现了分布式数据库中特有的一种“脏读”。因此GTID方案可以确保分布式事务的隔离性。
事务的持久性
和单机一样,分布式事务也需要保证事务的持久性,通过单节点数据的持久化和全局事务状态的持久化来完成,数据的持久化由单节点数据库保证,全局事务状态的持久化由全局事务管理器负责,全局事务管理器采用定时全量和实时增量方式实现事务状态的持久化:将GTID申请和释放的动作实时写到磁盘,同时每隔一定时间将全局事务管理中的活跃GTID列表以异步方式写到磁盘,通过定时的全量活跃GTID列表和实时的增量记录,可以获得任意时刻的活跃GTID列表。
1.数据库触发器:CREATE TRIGGER trig_stu_update ON student FOR UPDATE AS begin end; CREATE TRIGGER trig_stu_delete ON student FOR DELETE AS begin end;
2.数据库复合索引(聚集、非聚集索引、唯一索引、复合索引、系统自建索引):创建复合索引应当包含少数几个列,并且这些列经常在select查询里使用。
聚集、非聚集索引、唯一索引、复合索引、系统自建索引- http://sunct.iteye.com/blog/1933511
单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。 用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。
同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,如果不特殊说明的话一般是指单一索引。宽索引也就是索引列超过2列的索引。
设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效。拥有更多的窄索引,将给优化程序提供更多的选择余地,这通常有助于提高性能。
3.数据库的数据源组件:
数据源控件包括那些所有实现 IDataSource 接口的控件。.NET Framework 包含以下数据源控件:
SqlDataSource:连接到任意 ADO.NET 数据提供程序的数据源。
ObjectDataSource:连接到自定义的数据访问类。(这是大型专业 Web 应用程序倾向使用的数据源控件)
AccessDataSource:连接到 Access 数据库文件。用于小型网站,更好的小范围数据解决方案是使用免费的 SQL Server Express。
XmlDataSource:连接到 XML 文件。
SiteMapDataSource:连接到描述站点导航信息的 web.sitemap 文件。
--------------------------------------
> SQL基础及提高:
常用SQL语句大全总结- http://blog.csdn.net/wanghong5211/article/details/68687004
SQL语句的CRUD-- http://www.cnblogs.com/cunkouzh/p/5588319.html
数据库- http://blog.csdn.net/x359981514/article/category/1269503
Android Cursor用法 - http://blog.csdn.net/baohanqing/article/details/19244911
数据库MariaDB(腾讯推广的)- https://github.com/MariaDB/server/pull/246
SQL 基本知识- http://www.cnblogs.com/doubleyong/p/4312843.html
SQL关键字总结- http://www.cnblogs.com/ProgrammerGE/archive/2010/10/29/1864769.html
Sql语句常用关键字- http://blog.csdn.net/kenkao/article/details/4688336
SQL的多表操作- http://www.cnblogs.com/showonce/p/5947768.html
15 个常用的 SQL Server 高级语法- http://www.codeceo.com/article/15-sql-server-grammer.html
> SQLite (Android/iOS) -- 主流的Sqlite数据加密技术就是sqlitecipher
Android:SQLlite数据库操作最详细解析- http://www.jianshu.com/p/8e3f294e2828 https://github.com/Carson-Ho/DataBase_Demo
Android SQLite分页查询的三种方法- http://blog.csdn.net/lu1024188315/article/details/51734514
SQLite基本操作加数据库分页查询- http://blog.csdn.net/xfks55/article/details/6524792
Android 通过反射让SQlite建表如此简单--http://blog.csdn.net/nugongahou110/article/details/46926345
- ORM对象关系映射之使用GreenDAO进行CRUD操作- http://blog.csdn.net/u010687392/article/details/48444417
Android ORM 框架之 greenDAO 使用心得 http://www.open-open.com/lib/view/open1438065400878.html
GreenDAO数据库版本升级-http://blog.csdn.net/fancylovejava/article/details/46713445
数据库升级 http://blog.csdn.net/crystalddd/article/details/37742021
db.execSQL(CREATE_TEMP_USER); //第一步将旧表改为临时表
db.execSQL(CREATE_USER); //第二步创建新表(新添加的字段或去掉 的字段)
db.execSQL(INSERT_DATA); //第三步将旧表中的原始数据保存到新表中以防遗失
db.execSQL(DROP_USER); //第四步删除临时备份表
Sqlite分页查询语句:select * from users order by id limit 10 offset 0 ,offset代表从第几条记录“之后“开始查询,limit表明查询多少条结果,
分页查询 limit(int): 限制查询的数量; offset(int): 每次返回的数量;
第三方资源收集(GitHub)及SDK集成(GreenDao的升级和使用)- http://blog.csdn.net/shareus/article/details/52319945
/**
* GreenDao中对SQLite的分页查询
* 查询时默认是加了可重入锁,不用加synchronized
*
* @param page 需要查询的当前页
* @return
*/
public List<Collection> getDataWithPage(int page) {
List<Collection> ls = new ArrayList<Collection>();
ls = session.getCollectionDao().queryBuilder().offset((page - 1) * 10).limit(10).list();
return ls;
}
提升SQL性能的8点整理和建议- http://blog.csdn.net/huangwenyi1010/article/details/70799810
Android SQLite分页查询的三种方法- http://blog.csdn.net/lu1024188315/article/details/51734514
Sqlite数据库分页查询(ListView分页显示数据)- http://www.tuicool.com/articles/FNnAnub
> 数据库升级:增加表或增加字段,(删除表,删除字段)
SQLite数据库--升级数据库最佳操作- http://www.jianshu.com/p/4da13b38c1db
Sqlite数据库,增删改查,升级和事物- http://blog.csdn.net/ht1063899049/article/details/53643804
Android Sqlite 数据库版本更新- http://blog.csdn.net/long704480904/article/details/41325655
GreenDAO3.0 带数据库升级 demo-- http://download.csdn.net/download/flybamboo/9660390
GreenDao生成数据库模型代码依赖jar- http://download.csdn.net/detail/fancylovejava/8859203
GreenDaoUpgradeHelper- https://github.com/yuweiguocn/GreenDaoUpgradeHelper
> 官方下载最新版本:http://sqlcipher.net/ , https://github.com/sqlcipher/android-database-sqlcipher.git
SQLCipher项目代码 下载地址:https://github.com/sqlcipher/sqlcipher
> 1、为跨平台数据库引擎 SQLite 实现加密扩展 https://sites.google.com/site/notegainexp/sqlite/weikuapingtaishujukuyinqingsqliteshixianjiamikuozhan
2、SQLite加密--SQLCipher http://stormzhang.github.io/blog/2013/06/16/sqlite-encrypt/
> IOS官方的地址-- http://sqlcipher.net/ios-tutorial/ http://blog.csdn.net/kuai0705/article/details/8931996
SQLCipher和OpenSSL项目的框架代码都是开放的源代码
OpenSSL库-- https://www.openssl.org/ http://www.openssl.org/source/(稳定版本)
sqlite加密-SQLCipher http://blog.csdn.net/zhaopenghhhhhh/article/details/37698405
--------------------------------------------------------------------------
> orcale,orcale性能调优
58怎么玩数据库架构(upyun架构与运维大会速记):
http://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=403369608&idx=1&sn=48c56d64c2b5c27fed795219e7ba214a&scene=21#wechat_redirect
Oracle表分区详解(优缺点)-http://m.blog.csdn.net/feiyu84/article/details/6430512?ref=myread
Oracle的官方博客- https://blogs.oracle.com/theaquarium/
> MySQL
管理SQL Server AlwaysOn(1)——基础维护- http://blog.csdn.net/dba_huangzj/article/details/56666845
腾讯云技术大牛教你,MySQL内核深度优化- http://blog.csdn.net/qcloudcommunity/article/details/61915605
MySQL有两种常见的复制方案,异步复制和半同步复制。
微信高可用分布式数据库PhxSQL设计与实现- http://geek.csdn.net/news/detail/192400
PhxSQL架构和实现- https://github.com/tencent-wechat/phxpaxos
Proxy的协程模型使用开源的Libco库。Libco库是微信团队开源的一个高性能协程库- https://github.com/tencent-wechat/libco
MySQL主要有三个组件:连接/线程处理、MySQL Server层、存储引擎层:
最上层主要进行连接处理、授权认证、安全等;
第二层包括查询解析、分析、优化(这三个是解决问题最关心的)、缓存管理、所有内置函数、存储过程、触发器、视图,似乎扯得有点远;
第三层包含了主要的存储引擎层,MySQL Server层(第二层)通过“存储引擎API”向存储引擎层存储和提取数据,此层主要是数据存储相关。
MySQL百万级、千万级数据多表关联SQL语句调优- https://mp.weixin.qq.com/s/bZYb4w9vpf1jspYsZvpLwQ
> DB2
> SQLServer
<未完待续>
相关文章推荐
- [转载]Paxos算法在大型系统中常见的应用场景
- 【InfoPath应用场景:库存管理】在InfoPath Form Service利用WSS Web Service技术,通过VSTA代码把复杂表单写入SharePoint列表数据库的后继
- Paxos在大型系统中常见的应用场景(转)
- 算法:“森林的遍历” 在 “企业应用” 的常见场景
- 算法:“森林的遍历” 在 “企业应用” 的常见场景
- [导入]数据库应用系统设计面临的常见的大的方面的问题?
- 设计模式之——单例模式(Singleton)的常见应用场景
- Paxos在大型系统中常见的应用场景
- 对比主流NoSQL数据库特性与应用场景
- 设计模式之——单例模式(Singleton)的常见应用场景
- 一个常见REST应用场景的困惑和探究
- Paxos在大型系统中常见的应用场景
- Paxos在大型系统中常见的应用场景
- 常见算法思想的应用场景
- Paxos在大型系统中常见的应用场景
- Java常见设计模式应用场景
- Paxos在大型系统中常见的应用场景
- [ InfoPath应用场景:库存管理 ] 在InfoPath Form Service利用WSS Web Service技术,通过VSTA代码把复杂表单写入SharePoint列表数据库 (二)
- token的常见应用场景
- 近几年的开发经验:数据库设计中三大范式应用场景解析