重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
可参考以下课程大纲
工农ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
第一阶段:Python入门
基本语法
1.Python变量;2.Python的数据类型;3.Python中的运算符;4.流程控制;5.猜数字;6.猜数字改进;7.斐波那契数列、汉诺塔
字符串解析
1.字符串;2.原始字符串;3.长字符串;4.字符串内置方法;5.字符串格式化
时间日历
1.时间和日期;2.获取格式化时间 ;3.获取日历;4.Time模块;5.时间格式;6.日历模块
文件操作
1.在线文件管理系统;2.自定义递归统计目录函数;3.自定义递归赋值目录函数;4.自定义目录复制函数;5.自定义文件复制函数;6.优化在线文件管理系统
Python模块
1.模块概念;2.模块 函数 对象都是将程3.序分成较小的部分;4.模块就是可用代码打包;5.模块就是更高级的封装;6.模块作用;7.模块用法;8.命名空间;9.导入模块;10.包
异常处理
1.什么是异常;2.检测异常;3.处理异常;4.异常传递;5.自定义抛异常;6.With语句
实战项:Python及PyGame 快速开发
打飞机小游戏
1.游戏界面开发;2.检测键盘;3.操控飞机;4.射击子弹;5.敌机移动;6.射击积分;7.判断胜负
汉诺塔
Tkinter实现简易计算器
第二阶段:编程思想-算法、面向对象
数据结构及算法
1. 数组、链表、栈、队列、树、图2. 冒泡、二叉树、哈希、拆半等各种常见排序和查找算法学习
面向对象
1.面向对象思想;2.对象是一种封装的思想;3.数据和方法都封装在一起;4.类和对象;5.Self关键词;6.Python魔术方法;7.多态;8.类属性和实例属性;9.静态方法和类方法; 10.类的继承;11.继承的作用,不要每次都重新定义;12.让相似的东西自动传递就是继承;13.类继承的应用
设计模式
1.工厂模式;2.单例模式
第三阶段:Python全栈
HTML5+CSS3
1.一个最简单的页面;2.表格制作个人简历;3.音、视频页面;4.用户信息录入验证;5.网站首页;6.网页导航栏制作;7.使用表单制作注册页面;8.常见过滤、动画特效;9.页面布局;10.两栏、三栏页面;11.门户网站首页制作
JavaScript
1.JavaScript简介;2.在页面中使用JavaScript;3.JavaScript的语法;4.JS的DOM操作;5.JS的BOM操作;6.AJAX
JQuery
1.JQuery简介;2.JQuery安装;3.JQuery CSS操作;4.JQuery选择器;5.JQuery筛选;6.JQuery HTML文档处理;7.JQuery事件;8.JQuery效果;9.JQuery Ajax;10.JQuery其他操作;11.JQuery插件
项目
1.PS切图;2.CSS重置样式表;3.网页规范;4.兼容性;5.SASS;6.Compass精灵图;7.代码压缩;8.常见网站效果;9.rem相对大小布局
JavaScript单页应用技术开发实战
1.Bootstrap前端开发框架;2.Bootstrap前端开发框架
Django框架开发
1.Django框架发展;2.Django架构、MTV模式;3.开发流程;4.开发实例
RESTful接口开发
1.RESTful API是什么;2.如何设计好用的API;3.协议;4.域名;5.版本;6.路径;7.HTTP动词;8.过滤信息;9.状态码;10.错误处理;11.返回结果;12.Hypermedia API;13.身份认证;14.数据格式
微信公众号开发
1.微平台简介;2.微信服务号的申请与使用;3.接入方式简介;4.微信公众号数据格式简介;5.公众号接口数据解析和常用的令数据获取;6.信息教研原理 7.接收和发送文本数据包;8.接收和发送图片数据包;9.接收和发送新闻数据包;10.自定义菜单;11.微信支付接口接入与开发
MySQL数据库设计
1.数据库管理;2.MySQL数据库中数据表的设计;3.SQL语言设计
第四阶段:现代软件开发方法
Git项目代码管理和项目开发流程
1.MarkDown文档编写;
2.Git分布式版本控制器
敏捷、代码重构、测试驱动开发、自动化
第五阶段:非关系型数据库-NoSQL
非关系型数据库-NoSQL
MongoDB
Redis
Elasticsearch
第六阶段:Python运维
Linux
1.Linux常用命令;2.Linux系统管理;3.Linux网络应用;
Linux网络编程
1.网络编程原理;2.UDP网络编程;3.TCP网络编程;4.requests模块
Shell脚本编程
1.交互式程序与Shell脚本;2.Shell语法;3.管道和重定向;4.findgrep详解;5.sedawk脚本简介
第七阶段:Python人工智能
网络爬虫
1.爬虫原理与数据抓取;2.scrapy框架;3.爬虫分布式集群
大数据科学分析
1.数据分析;2.数据可视化
机器学习、深度学习
1.监督学习算法;2.Spark; 3.TensorFlow
第八阶段:毕业冲刺
毕业冲刺
综合运用前三阶段所学知识、为毕业就业做最后冲刺
1. 大型实战项目开发
2. 面试准备
RowKey
与nosql数据库们一样,RowKey是用来检索记录的主键。访问HBASE table中的行,只有三种方式:
通过单个RowKey访问(get)
通过RowKey的range(正则)(like)
全表扫描(scan)
RowKey行键 (RowKey)可以是任意字符串(最大长度是64KB,实际应用中长度一般为 10-100bytes),在HBASE内部,RowKey保存为字节数组。存储时,数据按照RowKey的字典序(byte order)排序存储。设计RowKey时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
Column Family
列族:HBASE表中的每个列,都归属于某个列族。列族是表的schema的一部 分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如 courses:history,courses:math都属于courses 这个列族。
Cell
由{rowkey, column Family:columu, version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。
关键字:无类型、字节码
Time Stamp
HBASE 中通过rowkey和columns确定的为一个存贮单元称为cell。每个 cell都保存 着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64位整型。时间戳可以由HBASE(在数据写入时自动 )赋值,此时时间戳是精确到毫秒 的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版 本冲突,就必须自己生成具有唯一性的时间戳。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的的管理 (包括存贮和索引)负担,HBASE提供 了两种数据版本回收方式。一是保存数据的最后n个版本,二是保存最近一段 时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。
命名空间
命名空间的结构:
请点击输入图片描述
Table:表,所有的表都是命名空间的成员,即表必属于某个命名空间,如果没有指定,则在default默认的命名空间中。
RegionServer group:一个命名空间包含了默认的RegionServer Group。
Permission:权限,命名空间能够让我们来定义访问控制列表ACL(Access Control List)。例如,创建表,读取表,删除,更新等等操作。
Quota:限额,可以强制一个命名空间可包含的region的数量。
1:
[SerializableAttribute] 是“可序列化”特征标示,
详情:
结合你的问题,一般这个标示会放在属性类的最上方,即这个类是可以被序列化的。
[SqlTable("表名称")] 这个也是特征标示, 一般是ORM框架写出的, 表示这个类和数据库表的映射关系。 如果不理解ORM、或者映射, 建议你补一下这方面的基础。
简单的说,就是数据库里面表叫T_STUDENT,对应的类就有[SqlTable("T_STUDENT")],
表示这个类是表的实体。
2:
数据库交互的技术统称ADO,C#即ADO.NET,
对于C#来说,sqlserver oracle mysql 或者其他nosql数据库都是一样的。
操作都是需要引用数据库操作dll,(由于都是微软出品,所以自带了 access 和sqlserver的dll)。
oracle需要去下载一个Oracle.ManagedDataAccess.dll 官网有下。
引用之后,和SQL server是一样的:
声明一个connection 然后声明 uid pwd database 这些参数。
然后打开connection,进行增删改查或者事物操作即可。
给你个示例代码:
public static string ConnectOracle()
{
try
{
string connString = "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=130.147.246.144)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ECMS)));Persist Security Info=True;User ID=system;Password=Service01;";
OracleConnection con = new OracleConnection(connString);
con.Open();
return string.Empty;
}
catch (Exception ex)
{
return ex.ToString();
}
}
db不帮你自动生成的时候。比如:
a. 不依赖第三方唯一id生成服务,利用业务db的特性来生成id
比如业务的“订单表”做了分库分表后,想要全局唯一的订单id,就让分库后每个库按不同的起点和步长做递增。这样订单系统就不用依赖发号服务了,自己解决问题
缺点是db扩缩容时候太复杂。
另一个思路是每个分表有一个前缀,在分表内自增
这样其实可以避免扩缩容麻烦的问题,比如sharding策略是预先分1000个表,每个表的id有个通用前缀,表内id自增
b. 非中心化方案,机器标识(比如mac地址)作为命名空间,通过命名空间保证唯一
比如:
c. 中心化方案,实现一个唯一id生成服务,基于写操作线性一致的存储
比如用mysql自增特性做个发号器服务
比如随机,往线性化存储里cas写,写成功就算申请到id
如果吞吐量过大、对存储有压力,可以在存储上面加个cache,预先从存储申请多个id(号段)。这个cache就不需要用redis等,起个java程序做进程内cache即可
再比如nosql之类的在时间戳字段上加索引很难,分页查最新数据的时候,只想按id查
Q: 类snowflake算法基于时间戳+命名空间,时钟回拨怎么办?
(发生闰秒、NTP时钟同步等情况都可能导致时钟回拨)
a. 外接存储记录最新时间戳,检测回拨。比如美团外接了个zk
b. 最终往线性化存储里写的时候检测重复,重复就报错重来
c. 多加几个命名空间,让概率小到忽略不计
Q: snowflake里的workerId咋生成
a. 基于线性化存储
比如美团方案,外接一个zk,每个机器顺序取workerId(依赖机器);
但是这样太重了,可以把workerId换成业务id,思想是通过命名空间减少冲突概率,而不是绝对唯一
b. 没必要一定用机器id,本质上只是加个命名空间,加几个业务字段作为命名空间就行
我们之前用到的方案是id里面除了时间戳还加上一些uid、业务类型、随机数之类的字段,作为命名空间,减少冲突概率
Q: 分布式关系库能否自动生成全局单调递增的唯一id?
看Tidb的只是单机递增,没法保证全局单调递增:
“趋势递增”和“全局单调递增”这两种保证处于两个极端,能否给出介于两者之间的保证?
架构 细聊分布式ID生成方法
Leaf——美团点评分布式ID生成系统
Membase Membase 是 NoSQL 家族的一个新的重量级的成员。Membase是开源项目,源代码采用了Apache2.0的使用许可。该项目托管在GitHub.Source tarballs上,可以下载beta版本的Linux二进制包。该产品主要是由North Scale的memcached核心团队成员开发完成,其中还包括Zynga和NHN这两个主要贡献者的工程师,这两个组织都是很大的在线游戏和社区网络空间的供应商。 Membase容易安装、操作,可以从单节点方便的扩展到集群,而且为memcached(有线协议的兼容性)实现了即插即用功能,在应用方面为开发者和经营者提供了一个比较低的门槛。做为缓存解决方案,Memcached已经在不同类型的领域(特别是大容量的Web应用)有了广泛的使用,其中 Memcached的部分基础代码被直接应用到了Membase服务器的前端。 通过兼容多种编程语言和框架,Membase具备了很好的复用性。在安装和配置方面,Membase提供了有效的图形化界面和编程接口,包括可配置 的告警信息。 Membase的目标是提供对外的线性扩展能力,包括为了增加集群容量,可以针对统一的节点进行复制。 另外,对存储的数据进行再分配仍然是必要的。 这方面的一个有趣的特性是NoSQL解决方案所承诺的可预测的性能,类准确性的延迟和吞吐量。通过如下方式可以获得上面提到的特性: ◆ 自动将在线数据迁移到低延迟的存储介质的技术(内存,固态硬盘,磁盘) ◆ 可选的写操作一一异步,同步(基于复制,持久化) ◆ 反向通道再平衡[未来考虑支持] ◆ 多线程低锁争用 ◆ 尽可能使用异步处理 ◆ 自动实现重复数据删除 ◆ 动态再平衡现有集群 ◆ 通过把数据复制到多个集群单元和支持快速失败转移来提供系统的高可用性。 MongoDB MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。它的特点是高性能、易部署、易使用,存储数据非常方便。 主要功能特性: ◆ 面向集合存储,易存储对象类型的数据 “面向集合”(Collenction-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每个 集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要定 义任何模式(schema)。 ◆ 模式自由 模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。 ◆支持动态查询 ◆支持完全索引,包含内部对象 ◆支持查询 ◆支持复制和故障恢复 ◆使用高效的二进制数据存储,包括大型对象(如视频等) ◆自动处理碎片,以支持云计算层次的扩展性 ◆支持RUBY,PYTHON,JAVA,C++,PHP等多种语言 ◆文件存储格式为BSON(一种JSON的扩展) BSON(Binary Serialized document Format)存储形式是指:存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。 ◆可通过网络访问 MongoDB服务端可运行在Linux、Windows或OS X平台,支持32位和64位应用,默认端口为27017。推荐运行在64位平台,因为MongoDB在32位模式运行时支持的最大文件尺寸为2GB。 MongoDB把数据存储在文件中(默认路径为:/data/db),为提高效率使用内存映射文件进行管理。 Hypertable Hypertable是一个开源、高性能、可伸缩的数据库,它采用与Google的Bigtable相似的模型。在过去数年中,Google为在PC集群 上运行的可伸缩计算基础设施设计建造了三个关键部分。第一个关键的基础设施是Google File System(GFS),这是一个高可用的文件系统,提供了一个全局的命名空间。它通过跨机器(和跨机架)的文件数据复制来达到高可用性,并因此免受传统 文件存储系统无法避免的许多失败的影响,比如电源、内存和网络端口等失败。第二个基础设施是名为Map-Reduce的计算框架,它与GFS紧密协作,帮 助处理收集到的海量数据。第三个基础设施是Bigtable,它是传统数据库的替代。Bigtable让你可以通过一些主键来组织海量数据,并实现高效的 查询。Hypertable是Bigtable的一个开源实现,并且根据我们的想法进行了一些改进。 Apache Cassandra Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于储存特别大的数据。Facebook在使用此系统。 主要特性: ◆ 分布式 ◆ 基于column的结构化 ◆ 高伸展性 Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能 是比较简单的事情,只管在群集里面添加节点就可以了。 Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库 的。Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。 CouchDB 所用语言: Erlang 特点:DB一致性,易于使用 使用许可: Apache 协议: HTTP/REST 双向数据复制,持续进行或临时处理,处理时带冲突检查,因此,采用的是master-master复制 MVCC – 写操作不阻塞读操作 可保存文件之前的版本 Crash-only(可靠的)设计 需要不时地进行数据压缩 视图:嵌入式 映射/减少 格式化视图:列表显示 支持进行服务器端文档验证 支持认证 根据变化实时更新 支持附件处理 因此, CouchApps(独立的 js应用程序) 需要 jQuery程序库 最佳应用场景:适用于数据变化较少,执行预定义查询,进行数据统计的应用程序。适用于需要提供数据版本支持的应用程序。 例如:CRM、CMS系统。 master-master复制对于多站点部署是非常有用的。 和其他数据库比较,其突出特点是: ◆ 模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部 署上。 ◆ 真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。 ◆ 多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。 ◆ 范围查询 :如果你不喜欢全部的键值查询,则可以设置键的范围来查询。 ◆ 列表数据结构 :在混合模式可以将超级列添加到5维。对于每个用户的索引,这是非常方便的。 ◆ 分布式写操作 :有可以在任何地方任何时间集中读或写任何数据。并且不会有任何单点失败。 问度娘,啥都有。
最近在回顾mongodb的相关知识,输出一篇文章做为MongoDB知识点的总结。
总结的目的在于回顾MongoDB的相关知识点,明确MongoDB在企业级应用中充当的角色,为之后的技术选型提供一个可查阅的信息简报。
MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库
(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的。
使用这样的数据模型,使得MongoDB能在生产环境中提供高读写的能力,吞吐量较于mysql等SQL数据库大大增强。
(2)易伸缩,自动故障转移。易伸缩指的是提供了分片能力,能对数据集进行分片,数据的存储压力分摊给多台服务器。自动故障转移是副本集的概念,MongoDB能检测主节点是否存活,当失活时能自动提升从节点为主节点,达到故障转移。
(3)数据模型因为是面向对象的,所以可以表示丰富的、有层级的数据结构,比如博客系统中能把“评论”直接怼到“文章“的文档中,而不必像myqsl一样创建三张表来描述这样的关系。
SQL类型的数据库是正规化的,可以通过主键或者外键的约束保证数据的完整性与唯一性,所以SQL类型的数据库常用于对数据完整性较高的系统。MongoDB在这一方面是不如SQL类型的数据库,且MongoDB没有固定的Schema,正因为MongoDB少了一些这样的约束条件,可以让数据的存储数据结构更灵活,存储速度更加快。
MongoDB保留了关系型数据库即时查询的能力,保留了索引(底层是基于B tree)的能力。这一点汲取了关系型数据库的优点,相比于同类型的NoSQL redis 并没有上述的能力。
MongoDB自身提供了副本集能将数据分布在多台机器上实现冗余,目的是可以提供自动故障转移、扩展读能力。
MongoDB的驱动实现一个写入语义 fire and forget ,即通过驱动调用写入时,可以立即得到返回得到成功的结果(即使是报错),这样让写入的速度更加快,当然会有一定的不安全性,完全依赖网络。
MongoDB提供了Journaling日志的概念,实际上像mysql的bin-log日志,当需要插入的时候会先往日志里面写入记录,再完成实际的数据操作,这样如果出现停电,进程突然中断的情况,可以保障数据不会错误,可以通过修复功能读取Journaling日志进行修复。
MongoDB使用分片技术对数据进行扩展,MongoDB能自动分片、自动转移分片里面的数据块,让每一个服务器里面存储的数据都是一样大小。
MongoDB核心服务器主要是通过mongod程序启动的,而且在启动时不需对MongoDB使用的内存进行配置,因为其设计哲学是内存管理最好是交给操作系统,缺少内存配置是MongoDB的设计亮点,另外,还可通过mongos路由服务器使用分片功能。
MongoDB的主要客户端是可以交互的js shell 通过mongo启动,使用js shell能使用js直接与MongoDB进行交流,像使用sql语句查询mysql数据一样使用js语法查询MongoDB的数据,另外还提供了各种语言的驱动包,方便各种语言的接入。
mongodump和mongorestore,备份和恢复数据库的标准工具。输出BSON格式,迁移数据库。
mongoexport和mongoimport,用来导入导出JSON、CSV和TSV数据,数据需要支持多格式时有用。mongoimport还能用与大数据集的初始导入,但是在导入前顺便还要注意一下,为了能充分利用好mongoDB通常需要对数据模型做一些调整。
mongosniff,网络嗅探工具,用来观察发送到数据库的操作。基本就是把网络上传输的BSON转换为易于人们阅读的shell语句。
因此,可以总结得到,MongoDB结合键值存储和关系数据库的最好特性。因为简单,所以数据极快,而且相对容易伸缩还提供复杂查询机制的数据库。MongoDB需要跑在64位的服务器上面,且最好单独部署,因为是数据库,所以也需要对其进行热备、冷备处理。
因为本篇文章不是API手册,所有这里对shell的使用也是基础的介绍什么功能可以用什么语句,主要是为了展示使用MongoDB shell的方便性,如果需要知道具体的MongoDB shell语法可以查阅官方文档。
创建数据库并不是必须的操作,数据库与集合只有在第一次插入文档时才会被创建,与对数据的动态处理方式是一致的。简化并加速开发过程,而且有利于动态分配命名空间。如果担心数据库或集合被意外创建,可以开启严格模式
以上的命令只是简单实例,假设如果你之前没有学习过任何数据库语法,同时开始学sql查询语法和MongoDB 查询语法,你会发现哪一个更简单呢?如果你使用的是java驱动去操作MongoDB,你会发现任何的查询都像Hibernate提供出来的查询方式一样,只要构建好一个查询条件对象,便能轻松查询(接下来会给出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成没问题,也正因为这样简洁,完善的查询机制,深深的爱上了MongoDB。
这里引用的是最新的驱动包,提供了一套新的访问连接方式
这里只举例了简单的链接与简单的MongoDB操作,可见其操作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。
插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。