时间戳

主键生成策略

故事扮演 提交于 2020-02-20 08:20:22
做项目时发现我们项目居然是直接用时间戳做为自定义主键,导致批量新增时报错,就查了一波自定义主键策略,集众家之所长,汇成这篇文章。 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1.数据库管理系统自增长主键策略 优点:简单,不需要程序特别处理。字段长度小,占用存储空间小,无论是在内存还是硬盘上。类型为数字类型,方便内部的比较和排序,对于查找有优势。如果同时也将其建立为聚集索引,那么其他列上的非聚集索引所需存储的内容会更少。由于其顺序增长,磁盘碎片少。 缺点:这种方法对以后如果项目移植到其他数据库上改动会比较大,oracle和db2采用Sequence,mysql和sqlserver采用自增长,通用性不强。仅为代理键,无实际意义。 (对于系统中大部分实际的业务功能采用1的自增长策略,这样可以减少开发工作量,并且性能和并发都有保障。如果项目需要进行移植,业务功能这部分则会有变动,做二次开发可暂时不考虑移植性。如果数据不会删除可以考虑使用自增列,如果会删除且删除频繁则会造成主键的极大浪费。) 2

谈谈RTP传输中的负载类型和时间戳

耗尽温柔 提交于 2020-02-19 18:49:43
最近被RTP的负载类型和时间戳搞郁闷了,一个问题调试了近一周,终于圆满解决,回头看看,发现其实主要原因还是自己没有真正地搞清楚RTP协议中负载类型和时间戳的含义。虽然做RTP传输,有着Jrtplib和Ortp这两个强大的库支持,一个是c++接口,一个是c语言接口,各有各的特点,各有各的应用环境,但是仅仅有库就能解决一切问题吗?可能仿照着一些例子程序,你能够完成主要的功能,但一旦问题发生了,不清楚原理你是很难定位和解决问题的,所以在此,用我的经验劝劝大家,磨刀不误砍柴工,做应用还是先把原理搞清楚再动手吧…… 看这篇文章之前,首先你应该知道什么是RTP协议,可以去看RTP协议原文(RFC3550协议),也可以看一些网友对RTP协议的讲解的文章,很多,这里我提供一篇我个人觉得写得还不错的:http://blog.csdn.net/bripengandre/archive/2008/04/01/2238818.aspx 。 下面言归正传,首先谈谈RTP传输中的负载类型吧 。 首先,看RTP协议包头的格式: 10~16 Bit为PT域,指的就是负载类型(PayLoad),负载类型定义了RTP负载的格式,协议原文说该域由具体应用决定其解释。 目前,负载类型主要用来告诉接收端(或者播放器)传输的是哪种类型的媒体(例如G.729,H.264,MPEG-4等),这样接收端(或者播放器

#include<unistd.h>头文件的理解

孤人 提交于 2020-02-19 13:37:51
参考: linux c获取系统时间戳 C语言中的sleep() 函数 #include<unistd.h>头文件的理解 这里的获取时间戳和获取当前日期时间是用的不一样的方法 在linux下,头文件<sys/time.h>已经定义好了结构体 struct timeval{ long tv_sec; //秒 long tv_usec; //微秒 }; demo(通过时间戳来生成一个唯一的名字,且按生成的时间顺序排列): #include <sys/time.h> #include <stdio.h> #include <unistd.h> #include <iostream> using namespace std; int main() { int i; struct timeval tv; for(i=0; i<4; ++i) { gettimeofday(&tv, NULL); printf("%d\t%d\n",tv.tv_usec,tv.tv_sec); string image_n = std::to_string(tv.tv_sec) + "_" + std::to_string(tv.tv_usec); cout<< "iamge_name :"<<image_n <<endl; sleep(1); } return 0; } 关于sleep函数的注意点:

3.Mysql支持的数据类型

大城市里の小女人 提交于 2020-02-19 08:38:53
3.Mysql支持的数据类型 数据类型用来指定一定的存储格式、约束和有效范围。 数据类型主要有:数值类型、字符串类型、日期和时间类型。 3.1 数字类型 类型名 字节数 有符号最小值 有符号最大值 无符号最小值 无符号最大值 有效范围 有效位数 备注 tinyint 1B -128 127 0 255 2^8bit 2位 整数 smallint 2B -32768 32767 0 65535 2^16bit 4位 整数 mediumint 3B -8388608 8388607 0 16777215 2^24bit 6位 整数 int\integer 4B -2147483648 2147483647 0 4294967295 2^32bit 9位 整数 bigint 8B -9223372036854775808 9223372036854775807 0 18446744073709551615 2^64bit 18位 整数 float 4B +-1.175494351E-38 +-3.402823466E+38 6位 浮点数 double 8B +-2.2250738585072014E-308 +-1.7976931348623157E+308 15位 浮点数 dec(m,d)/decimal(m,d) m+2B dec(-65) dec(65) 0 dec(65,0~30

javaScript系列:js中获取时间new Date()详细介绍

不羁岁月 提交于 2020-02-19 04:07:42
javaScript系列:js中获取时间new Date()详细介绍 1.自动获取今天星期几: var aaa = '日一二三四五六' aaa.charAt(new Date().getDay()) //"日" 2.获取今天日期格式(----年--月--日): myDate.getFullYear()+'年'+(myDate.getMonth()+1)+'月'+myDate.getDate()+'日' //"2015年11月8日" 3.详解 var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getMonth()+1 myDate.getDate(); //获取当前日(1-31) myDate.getFullYear()+'年'+(myDate.getMonth()+1)+'月'+myDate.getDate()+'日'; //"2015年11月8日" myDate.getDay(); //获取当前星期X(0-6,0代表星期天) myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) 时间戳 myDate

day20 python常用模块

感情迁移 提交于 2020-02-18 23:39:30
认识模块     什么是模块?      常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。      但其实import加载的模块分为四个通用类别:        1 使用python编写的代码(.py文件)       2 已被编译为共享库或DLL的C或C++扩展       3 包好一组模块的包       4 使用C编写并链接到python解释器的内置模块    为何要使用模块?      如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。     随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。      这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用, 常用模块  1. collections模块     在内置数据类型(dict, list, set, tuple) 的基础上, collections 模块还提供了几个额外的数据类型:namedtuple, deque, OrderedDict, defaultdict,

Python中常用模块一

守給你的承諾、 提交于 2020-02-18 23:38:44
浏览目录 re模块 collections 模块 time 模块 random 模块 os 模块 sys 模块 序列化模块 一、re模块 先看一道例题: 我们平时登录注册要输电话号码,输入不符合电话号码规则,就会提示你输入错误。那么怎么判断电话号码是否符合输入条件呢?我们一般都会这样写。 while True: phone_number=input("please input your phone nunber:") if len(phone_number) ==11 and phone_number.isdigit() \ and (phone_number.startswith("13") or phone_number.startswith("17") or phone_number.startswith("17") or phone_number.startswith("18")): print("是合法的电话号码") else: print("是不合法的电话号码") 输入号码规则 是不是感觉还行啊,容易理解,也不难。那咱们看一个更简单的。 import re phone_number=input("please input your phone number:") if re.match("^(13|14|17|18)[0-9]{9}$",phone_number ):

系统架构:分布式ID那点事儿

寵の児 提交于 2020-02-18 17:29:54
原文: https://zhuanlan.zhihu.com/p/107592567 全局唯一 不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增 为什么要趋势递增呢? 第一,由于我们的分布式ID,是用来标识数据唯一性的,所以多数时候会被定义为主键或者唯一索引。 第二,大多数互联网公司使用的数据库是MySQL,存储引擎为innoDB,对于BTree索引来讲,数据以自增顺序来写入的话,b+tree的结构不会时常被打乱重塑,存取效率是最高的,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。 信息安全 由于数据是递增的,所以,恶意用户的可以根据当前ID推测出下一个,非常危险,所以,我们的分布式ID尽量做到不易被破解。如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。 数据库自增方案缺点: 1.高并发下性能不佳,主键产生的性能上限是数据库服务器单机的上限 2.水平扩展困难,严重依赖数据库,扩容需要停机 Flicker方案: [flicker算法原文] http://code.flickr.com/blog/2010/02/08/ticket

linux--NTP配置

一世执手 提交于 2020-02-18 05:19:57
1、什么是NTP NTP(Network Time Protocol)是网络时间同步协议,就是用来同步网络中各个计算机的时间的协议。NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。 2、为什么使用NTP 为了避免主机时间因为长期运作下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务器和ntp客户机。在网络中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。 3、NTP原理简介 NTP的基本工作原理如图1所示。Device A和Device B通过网络相连,它们都有自己独立的系统时钟,需要通过NTP实现各自系统时钟的自动同步。为便于理解,作如下假设: l 在Device A和Device B的系统时钟同步之前,Device A的时钟设定为10:00:00am,Device B的时钟设定为11

js根据时间戳倒计时

﹥>﹥吖頭↗ 提交于 2020-02-17 18:33:45
今天有个需求,要在页面上做当前时间距离下个月1号的倒计时。在网上找了很多案例也试了很多,大部分都是获取本地当前时间,然后设置结束时间进行计算,然后倒计时。但是有几个 问题 :   1.如果本地时间和服务器时间是一样的那么就不会出现什么问题,   2.由于无法保证所有用户的本地时间都与服务器时间相同,而使用 new Date() 获取的本地时间,那么如果用户修改本地时间,就会对倒计时进行影响,从而出现问题   解决办法:   从后台获取 开始时间和结束时间的时间戳来进行倒计时,这样的话就不用去管本地的时间是否与服务器系统时间相同 具体代码如下:  <time id="timer">26天6小时</time>    第一种使用setInterval来进行倒计时 <script> var startTime=1508428800;//开始时间 var endTime=1508428860; //结束时间 setInterval(function(){ var ts =endTime-startTime;//计算剩余的毫秒数 console.log(ts); var dd = parseInt(ts / 60 / 60 / 24, 10);//计算剩余的天数 var hh = parseInt(ts / 60 / 60 % 24, 10);//计算剩余的小时数 var mm =