end -- 数据库笔记3--postgres语法
安装:
数据库管理命令:
列出所有数据库:\l
切换数据库:\c
列出所有表:\d
查看表字段信息:\d tableName
列出所有用户:\du
列出当前数据库和连接信息:\conninfo
基础操作
创建数据库:create database dbName;
删除数据库:drop database dbName;
创建表:create table tableName(columnName type,columnName type);
删除表:alter table oldTableName rename to newTableName;
删除表:drop table tableName;
修改表字段类型:alter table tableName alter columnName type columnType;
修改表字段名字:alter table tableName alter oldColumnName to newColumnName;
删除表字段:alter table tableName drop column columnName;
...
名词解释 -- WAN、LAN、ETH接口
没有WAN和LAN
从日常生活的角度看,一般路由器上有一个wan和多个lan口,需要将运营商外网连接到WAN口,而家里的终端设备连接到LAN口
从概念上说,其实都是物理接口,只是厂家出厂配置不同才从业务上分为了WAN口和LAN口
那么问题来了,有的路由器有两个WAN口可以接入不同运营商网络,在实现原理上和单WAN口区别是什么
PHY和MAC
mac和phy之间是一对多的关系
物理口和虚拟口
之前提到的其实没有什么WAN或者LAN,所有的物理接口都应该叫ETH(以太接口)
ETH0-ETHn,每个ETH口对应一个mac,ETH信息是能在设备的操作系统中查询到的,一般是网卡加载的时候进行注册
虚拟网口:
ETH0:x
ETH0.x 这个就很像我们设备上vlan了
end -- 尚硅谷数据库课件
尚硅谷数据库课件
2016年1月20日
15:08
day15-MySQL
数据库
1数据库概念(了解)
1.1什么是数据库
数据库就是用来存储和管理数据的仓库!
数据库存储数据的优先:
l
可存储大量数据;
l 方便检索;
l 保持数据的一致性、完整性;
l 安全,可共享;
l 通过组合分析,可产生新数据。
1.2数据库的发展历程
l 没有数据库,使用磁盘文件存储数据;
l 层次结构模型数据库;
l 网状结构模型数据库;
l 关系结构模型数据库:使用二维表格来存储数据;
l 关系-对象模型数据库;
MySQL就是关系型数据库!
1.3常见数据库
l Oracle(神喻):甲骨文(最高!);
l DB2:IBM;
l SQL Server:微软;
l Sybase:赛尔斯;
l MySQL:甲骨文;
1.4理解数据库
l RDBMS = 管理员(manager)+仓库(database)
l database = N个table
l table:
Ø 表结构:定义表的列名和列类型!
Ø 表记录:一行一行的记录!
我们现在所说的数据库泛指“关系型 ...
Kafka -- 三、生产者
[toc]
生产者就是往Kafka中写入数据的应用程序,Kafka自己提供了生产者,也有很多第三方实现的客户端(我们当然以python为例)
概览
创建生产者123456from kafka import KafkaProducer, KafkaConsumer, TopicPartitionKafkaProducer( bootstrap_servers=['{}:{}'.format(KAFKA_HOST, KAFKA_PORT)], key_serializer=lambda k: json.dumps(k).encode(), value_serializer=lambda v: json.dumps(v).encode())
bootstrap_servers
key_serializer
value_serializer
发送消息发送的流程:消息先被放入缓冲区,然后使用单独的线程发送到服务器端,send()会返回一个包含RecordMetadata的Future对象
不用考虑发送消息时可能发生 ...
Kafka -- 个人实践-安装和基础介绍
安装使用docker进行安装,很简单,中docker笔记中记录了,安装参考教程
基础配置1234567891011121314151617181920212223<!--进入kafka容器-->docker exec -it kafka bashcd /opt/kafka/bin<!--创建一个主题-->kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 2 --topic kafka_demo<!--查看主题-->kafka-topics.sh --zookeeper zookeeper:2181 --list<!--查看主题下的消息数量-->kafka-run-class.sh kafka.tools.GetOffsetShell --topic firefly --time -1 --broker-list localhost:9092 --partitions 0<!--删除主题-->kafka- ...
Kafka -- 二、Kafka的配置说明
[toc]
配置说明broker配置常规配置
broker.id:broker的标识符,在集群中必须是唯一的
port:默认是9092
zookerper.connect:指定zookeeper服务的地址和端口
log.dirs:指定Kafka消息持久化路径,可以是一组逗号隔开的本地文件系统路径,会按分区把数据写入这些路径
num.recover.threads.per.data.dir
Kafka会使用线程池来处理日志片段,但只有中服务器启动或关闭的时候才会用到,来并发的处理数据
如果有三个目录,且本参数设置为8,则会有24个线程并发处理
auto.create.topics.enable:Kafka的主题可以不创建直接使用,生产者推送数据的时候会自动创建主题(消费也会触发),这个参数用来配置是否自动创建
主题的默认配置
num.partitions
分区数量
分区数量是个很重要的参数,由于一个分区最多被一个消费组中的一个消费者消费(其实就是最多就只能被一个消费者消费),所以分区数量是消费的瓶颈,需要综合生产速度和单个消费速度来决定分区的数量
还要考虑磁盘空间和带宽因素
分区数 ...
Kafka -- 五、深入Kafka
[toc]
深入Kafka这里主要讨论以下三个话题
Kafka如何进行复制
Kafka如何处理来自生产者和消费者的请求
Kafka的存储细节(文件&索引等)
集群成员关系
Kafka使用zookeeper来维护集群成员信息
每个broker都有一个唯一ID,不能冲突,broker启动的时候会在zookeeper中创建一个临时节点信息,卡夫卡组件订阅zookeeper来获取broker的状态信息
broker停机或者其他异常时,其启动时在zookeeper上创建的临时节点信息会消失,组件也就会被告知该broker被移除
另外如果是正常关闭了broker,那么它的ID还会在别的地方进行存储,如果这个时候再用这个ID去启动一个全新的broker,那它会拥有旧broker的分区和主题
控制器
控制器是第一个加入集群的broker,相比普通成员它会额外负责首领的选举
第一个broker加入集群时在zookeeper中创建临时节点并把自己注册为控制器,之后的节点进来发现有控制器了就不会再注册控制器,如果控制器关闭了,那它对应的临时节点消失,其余的成员会收到通知,第一个尝试注册的bro ...
Kafka -- 六、可靠的数据传递
[toc]
可靠数据传递可靠性保证关系型数据库可靠性保证一般是ACID(原子、一致、隔离、持久)
那么Kafka提供哪些方面的保证呢
分区消息的顺序,同一个生产者往同一个分区写入消息,那么Kafka会保证消息会按生产者写入的顺序进入分区,且消费者会按这个顺序进行消费
只有当消息被写入分区的所有同步副本时(不一定写入磁盘了,可能是交付给了文件系统缓存),才被认为是已提交
只要还有一个副本是活跃的,那么已经提交的消息就不会丢失
消费者只能读取已提交的消息
Kafka只是提供了这些基础的保证,需要结合场景进行配置来达到数据的可靠性
复制Kafka的主题被分为多个分区,分区可以是在线的也可以是离线(不可用)的,每个分区可以有多个副本,其中一个为首领,所有事件都由首领处理,其余副本会自动从首领同步数据,跟随者需要满足以下条件才被认为是同步的
与zookeeper见有一个活跃的会话(6s内发送过心跳)
过去10s内从首领获取过消息
过去10s内从首领哪里获取过最新的消息
如果一个或多个副本在同步和非同步间快速切换,通常是因为JVM不恰当的垃圾回收配置导致的;一个滞后的同步副本会导致生产和消 ...
Kafka -- 四、消费者
消费者概念消费者和群组
可以单独的创建一个消费来对某个主题消息进行消费,但是可能一个消费者速度跟不上
扩展单个消费者为消费者群组,一个群组中的消费者订阅的是同一个主题,Kafka会去控制消费者和分区之间的关联,群组中每个消费者接收主题一部分分区的消息
通过扩展消费者数量来提高消费速度,需要注意不要让消费者数量超过分区,多出来的消费者会被闲置
如上图,两个群组可以互不干扰的消费同一个主题
消费者和分区再均衡考虑一些操作或者异常情况:
添加新分区
关闭群组中的某个消费者或群组中某个消费者异常消亡
这些情景下会发生分区重分配,分区的所有权从一个消费者转移到另一个消费者,叫做再均衡
消费者通过向群组协调器borker(从broker集群中指派出来的,且不同的群组可以有不同的协调器)发送心跳来维持它和群组的从属关系以及对分区的所有权关系
消费者会在轮询消息或提交偏移量时发送心跳,如果消费者停止发送心跳时间足够长,回话就会过期,协调器会认为它已经死亡,触发一次再均衡
如果一个消费者崩溃,协调器会等待几秒钟确认它死亡了才触发再均衡
如果一个消费者被清理(正常的关闭),它会主动通知协 ...
MySQL -- SQL注入
Django ORM模型查询使用Django自己提供的模型层语法进行数据查询可以防止SQL注入
1asns = FpingAsn.objects.filter(operator_id__in=operators).values_list('asn', flat=True)
使用原生SQL方式一:
12345from django.db import connectioncursor = connection.cursor()query_sql = "select count(*) from automatic_product.subinterface where is_alloc = 1 and site_id = '{}' and app_id is not null and status = 'ok'".format(site.id)cursor.execute(query_sql)used_count = cursor.fetchall()
这种方式下,不能防止SQL注入 ...