• [上云精品] 阿帕网络携手华为打造智慧物流园
    本帖最后由 物联网专家 于 2018-4-11 16:50 编辑13795 13796 13797 13798 联系我们: 山东阿帕网络技术有限公司 网址:www.kuaituo.com 24小时电话:400-617-5656 地址:山东省临沂市兰山区应用科学城B座 扫码关注我们 产品推荐:(点击图片可了解更多)13801
  • 屯着备用的少儿编程入门书籍清单推荐
    纵观国外的一些科技大佬都是从小就开始学习编程,如比尔盖茨在13岁的时候就开始学习Basic编程;扎克伯格、苹果创始人乔布斯从12岁开始学编程;推特创始人杰克·多西学习编程的时间更早,从8岁就开始了。而在国内,从小就开始学习编程的儿童却寥寥无几,假如你的孩子正好对互联网、电脑感兴趣的话,那么,编程技术的学习一定会是从小培养的首选。 作为程序猿的你,是否会培养后代把编程最为一项爱好,顺带像乔帮主一样的改变世界? 小编罗列了基本少儿编程书籍供参考: 1、《Scratch少儿趣味编程》 优点:结合漫画卡通人物,趣味性比较好Scratch 是麻省理工学院设计开发的一款编程工具, 包含了编程语言最基本的元素:变量、函数、循环等,很是适合孩子入门编程,本书作者阿部和广师从PC之父、面向对之父、图灵奖得主艾伦·凯博士。近年来多次举办面向少儿的编程讲座,在儿童编程方面经验十足。书中结合孩子们学习的语文、数学、科学、社会、音乐、体育等科目,手把手地教读者如何用Scratch 设计程序(如设计一个自动写作文的程序),配合各式卡通形象,让孩子不会感到枯燥乏味。学习编程最主要的就是兴趣,所以本书十分适合中小学生等初学者自学或在家长的帮助下学习。2、《动手玩转Scratch2.0编程》优点:讲解细致,由浅入深《动手玩转Scratch2.0编程—STEAM创新教育指南》的目标是将Scratch 作为工具,教会读者最基本的编程概念,同时揭示Scratch 在教学上的强大能力。本书也是以示例来演示,不过里面还穿插了数据结构等计算机科学方面的知识。所以,此书阅读人群最好是对编程明确感兴趣的,并且已经有一点基础的中学生。3、《Scratch少儿趣味编程2》 优点:结合漫画卡通人物,趣味性强 本书是《Scratch 少儿趣味编程》系列的第二本,采用升级版本Scratch 2.0 教大家如何用Scratch 设计程序,内容贯彻STEAM 教育理念,综合了数学、科学、音乐、实践等科目,旨在引导读者通过实践来探索、发现并理解现实中的知识,在激发创造力的同时提升思考能力和与他人的协作能力。适合中小学生等初学者自学或在家长的帮助下学习。4、《父与子的编程之旅》 [color=rgb(62,62,62)]优点:浅显易懂,卡通人物场景[color=rgb(62,62,62)]当你家孩子学完Scratch这类图形化编程后,如果孩子真的对编程有浓厚的兴趣,希望进一步学习,真正地学习代码类编程语言,那么从Python编程语言入门就是个不错的选择5、《我的第一本编程书》 [color=rgb(62,62,62)]优点:与生活例子相结合,讲解详细、连贯[color=rgb(62,62,62)]本书是编程的入门书,目的在于教会读者编程的基本思路和方法。书中使用专门的工具Sunaba,向读者展示如何从零开始一步步做出一个完整的程序。书中内容讲解详细、连贯,并采用了大量能与现实生活相结合的例子。特别是在对编程思路的介绍上进行了详细的说明。[color=rgb(62,62,62)]这本书主要以编程思维培养为起点出发,让还孩子逐渐培养编程的基本思路和方法,喜欢编程,又不喜欢枯燥的可以尝试从这本书入门。[color=rgb(62,62,62)]6、《网络是怎样连接的》 [color=rgb(62,62,62)][color=rgb(62,62,62)]优点:对话的形式介绍网络术语[color=rgb(62,62,62)]的词源[color=rgb(62,62,62)]本书以探索之旅的形式,从在浏览器中输入网址开始,到显示出网页内容为止的整个过程,同样以图文形式讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。[color=rgb(62,62,62)]推荐完书,有的人不禁要问了,儿童学编程好不好?其实学会编程不仅仅只是学编程,对孩子的逻辑思维能力、解决实际问题的能力都有很深的影响。
  • mongoreplay 常用参数详解
    应用场景:作为程序员大家肯定都遇到过一种场景,现网上程序出现bug,大家登录到现网后,bug环境早已变化,想在现网上复现bug,但触发bug的环境很难出现,并且运维同事也不允许程序员在现网环境上。那么怎么复现bug环境呢?如果有一种工具能够把程序在现网上接收的所有网络包存储下来,然后在测试环境上将这个些存储的网络包进行重放,复现bug。因为可以重放多次,并且是在测试环境上,那这种工具对程序员查找和定位bug将会相当方便。而mongodb就提供了这样的一种工具mongoreplay。 工具比较:mongoreplay 在3.4版本才开始提供,比3.4早的版本是没有这样的工具的。更早的版本提供了一个可以存储mongodb收到的所有网络包的工具mongosniff,但mongosniff不能重放所有网络包,只是一个捕获工具。 mongoreplay 参数详解:mongoreplay 有3个命令 record,play,monitor。record 记录捕获的网络包,play将record记录的网络包在目标机器上进行重放操作。record 支持如下参数:-f : 此参数组主是方便mongoreplay工具和其他网络抓包工具配合使用。利用主流的抓包工具( TcpDump/WinDump, Wireshark/TShark, snort等)生成pcap 格式的抓包文件,将其转换成mongoreplay对应的网络包格式。 -i : mongoreplay监听的网卡,此网卡上的任何网络包会被记录下来。-i参数和-f参数这两次参数是冲突的,只能使用其中的一个。 --expr , -e : 网络包过滤条件,只有符合对应条件的包才记录下来,常用的主要是'port 27017'这个过滤条件,只记录端口27017上的网络包,我们只捕获mongodb端口上的包。 --playback-file , -p : 存储捕获的网络包的文件。 --gzip : 如果存储的网络包太大,可以使用这个参数将捕获的网络包文件进行压缩,减少文件的大小。用例:mongoreplay record -f traffic.pcap -p ~/recordings/playback mongoreplay record -i eth0 -e "port27017" -p ~/recordings/playback play 支持如下参数: --playback-file , -p : 从这个文件里面读取记录的捕获的网络包,进行重放操作。 --host :port>, -h :port>: 指定目标机器,即在哪个机器上将捕获的网络包进行重放 --speed number: 重放的速率,默认值是1.0,即按照捕获的包的速率进行重放。可以调快或调慢重放的速率。 --repeat number: 重放的次数 --report : 指定将重放过程中的执行报告保存的路径,如果没有这个参数,执行报告就输出在终端。 --collect : 指定执行报告输出的格式,当参数值为format时,和—format参数配合使用。 --format: 和collect 配合使用,让用户自己对执行报告进行格式化,方便用户阅读。用例:mongoreplay play -p~/recordings/playback --report ~/reports/replay_stats.json --hostmongodb://192.168.0.4:27018 monitor 支持如下参数:monitor 的参数和play基本上一样,只是没有—host参数,它其实就相当于play的预演,由于没有连接目标机器,因此不会产生实际效果。
  • [热门活动] 【云端大事件】苏州会信捷信息科技有限公司入驻华为云市场,助力业务上云
    【云端大事件】苏州会信捷信息科技公司入驻华为云市场,助力通讯社交安全业务上云【导语:】大势所趋的安全隐私防护!!!如今信息安全产业逐渐发展,而互联网已成为维护信息安全的重要载体之一,网络及信息安全逐渐被纳入人们的视野,信息安全的国际国内形势都很严峻,这也将持续成为市场的关注热点。互联网的发展促进了信息的传播,从而使整个社会更加开放和民主,但是,也带来了安全隐患及隐私泄露。在全球一体化的商业环境中,信息的重要性被广泛接受,计算机网络技术的快速发展和应用,使得电子商务、网络管理、网络通信等已经成为企业正常运营的必要环境。企业信息安全问题越来越紧迫,重要信息资产的泄露,可能会给企业带来巨大的危害,甚至使企业陷入窘境或者破产。同时来自于外部网络的入侵行为尽管可以通过防火墙之类的工具进行一定程度的防护,但随着黑客攻击技术的日新月异,防范效果越来越不明显; 而对于来自网络内部的安全威胁,就更加缺少行之有成效的防范手段。正是基于此种情况,才需要建立一个商务人士专属的通讯平台,也才会有商务密语的产生和存在。随着移动办公的发展,移动互联网通讯社交安全是企业普适性需求。商务和一些特殊行业对移动互联网通信社交安全需求更强烈。而保证互联网通讯社交安全及保护隐私的唯一方法就是加密。越来越多的商务用户开始产生对通讯安全及个人信息隐私保护的诉求,希望能通过利用某些工具来保障信息不被盗取。现苏州会信捷信息科技有限公司入驻华为云市场,在华为云市场发布了商务密语产品,这是一款基于端到端加密安全移动社交通讯云平台及SDK、提供隐私保护和加密防窃听的SaaS服务,帮助企业和商务用户解决通讯安全问题,使信息安全和隐私保护能够更加普及化。 苏州会信捷信息科技有限公司是一个拥有移动通讯及移动互联网丰富经验的专业团队。掌握了最先进的移动互联网通讯安全核心技术,拥有能力开放的端到端加密安全移动社交通讯云平台及SDK,以及多网融合移动音视频通讯社交及会议平台。苏州会信捷信息科技有限公司开发的安全移动办公和安全移动CRM平台是目前国内市场唯一的、可以防中间人攻击的、端到端加密安全无漏洞移动通讯云平台,该平台可以为企业安全移动办公保驾护航;嵌入了安全通讯SDK的金融类移动APP,可以有效地防止电信诈骗。会信捷公司的创始人拥有多个端到端加密核心专利,其安全无漏洞加密技术处于世界领先水平。 13661 商务用户可以通过商务密语服务进行端到端加密安全防窃听的语音通话;在稳定的网络状态下具有流畅清晰的通话质量;商务用户也可用即时通讯进行聊天,聊天信息阅后即焚,需要时也可选择留存。商务密语注重保护商务用户隐私。服务采用国际最前沿的数据加密防第三方攻击技术,可拦截非法窃听。平台提供的安全通讯社交服务有以下几大特点:1 提供端到端加密防攻击电话服务端到端加密的防窃听IP网络电话,每一对通信双方用独享的、私密的共同密码。给信息/电话加密,不解密而通过任何节点, 服务器或路由器,达到了真正通讯安全。 136622 提供流畅稳定的语音通话质量通话无缝换网,自动切换网络(WiFi与3G,4G)通话不中断。3 聊天信息可阅后即焚阅后即焚信息在对方打开图片、文字或听到语音留言若干秒后即在双方手机内消失,服务器上不留痕。商务用户也可选择保留聊天信息。 4 具有四种即时通讯消息以保护商务用户信息安全和隐私商务用户之间可以传送文件、照片、语音以及名片,有以下四种即时通讯消息类型: (1)普通消息:商务用户打开聊天对话框就能查看所发的消息内容。软件会为商务用户自动留存一定的时间,当商务用户点击清除的时候,内容则会被全部删除,而且服务器上也不会留存也不能进行二次查看。(2)阅后即焚消息:在对方打开图片、文字或听到语音留言若干秒后,消息即在双方手机内消失,服务器上不留痕。消息浏览方无法下载、本地保存和向外转发。(3)端到端加密消息:在商务用户通话时通过安全信道交换加密的密钥,这个密钥是双方私有的;而且这个密钥也是一次一密的形式,每次双方进行通话时使用安全的信道交换密钥,之后可回到聊天界面就能进行加密消息的发送。(4)端到端加密阅后即焚消息:既防止别人破解,又防止对方留底。商务用户可根据自己不同的选择来进行消息种类的切换发送。 13663苏州会信捷开发的商务密语能随时随地有效的保护商务用户的隐私,为商务用户的信息安全加上一个防护锁。在这个移动互联网竞争激烈的年代,他们在用自己的实践去帮助商务用户构建一个极致的安全隐私空间。
  • [行业资讯] 2018年全球游戏大会(GMGC2018),华为云在游戏领域的布局及生态
    由GMGC主办的第七届全球游戏大会(简称GMGC北京2018)将于2018年4月2-3日在中国·北京·国家会议中心盛大召开。本届大会以“游戏改变世界”为主题,涵盖游戏、影视、动漫、数字文化与产品等泛娱乐领域核心内容,面向全球游戏及数字娱乐产业上下游企业。 大会将邀请全球30+国家和地区,100+演讲嘉宾,3000+企业参会,超过10000人出席,打造全球游戏行业的学习交流和商务合作平台。同期举办全球移动游戏大奖(简称GMGA)颁奖盛典,让自全球的游戏与中国游戏共竞年度最具期待和成长性的游戏产品奖。 GMGC北京2018大会将成为游戏相关企业把握全球化市场下的中国机会,改变全球游戏市场格局的首选。 http://www.gmgcongress.com/
  • [技术干货] DHCP无法正常获取内网IP?
    问题描述DHCP无法正常获取内网IP,当DHCP无法正常获取内网IP时,不同系统的弹性云服务器表现如下: [*]Linux系统表现为无法获取内网IP。 [*]windows系统由于自身的机制,会表现为弹性云服务器内网IP变为169.254网段中的一个IP,和官网上显示的内网IP不同。 处理方法 [*]检查弹性云服务器所在的子网是否开启DHCP,若没有开启,则开启DHCP。 [*]查看弹性云服务器内是否存在dhclient进程, [*]登录Linux弹性云服务器,执行如下命令,查看是否存在dhclient进程。ps –ef | grep dhclient, [*]若dhclient进程不存在,可以登录弹性云服务器,重启网卡或主动发起DHCP请求。 [*]Linux系统执行以下命令:dhclient eth0或ifdown eth0 + ifup eth0或dhcpcd eth0 [*]windows系统在网络连接中选择其中一个网络设备,单击鼠标右键,选择“禁用”,再单击“启用”。 [*]对于DHCP Client长期不发起请求的情况(例如重启网卡后又复现),可以参照以下操作: [*]配置静态IP: [*]windows系统: [*]在网络连接中选择“属性”。 [*]在弹出的窗口中选择“Internet协议版本4”,单击“属性”,修改相关配置。 [*]Linux系统: [*]登录Linux弹性云服务器,执行如下命令,修改配置。vi /etc/sysconfig/network-scripts/ifcfg-eth0BOOTPROTO=staticIPADDR=192.168.1.100 #IP地址(修改)NETMASK=255.255.255.0 #掩码值(修改)GATEWAY=192.168.1.1 #网关地址(修改) [*]执行如下命令,重启网络服务。service network restart 2. 选取有DHCP持续获取能力的镜像。 [*]Windows系列,原生支持持续获取,例如:Windows Web Server 2008 R2 64bit;Windows Server Datacenter 2008 R2 64bit;Windows Server Enterprise 2008 SP2 64bit;;Windows Server Enterprise 2008 R2 64bit。 [*]CentOS系列,通过在“/etc/sysconfig/network-scripts/ifcfg-ethX”中添加PERSISTENT_DHCLIENT="y”可全部支持持续获取。 [*]Ubuntu系列,如Ubuntu1004,Ubuntu1404原生支持持续获取。 [*]若以上步骤没有解决问题,可以通过查看客户弹性云服务器的messages日志(路径为“/var/log/messages”)排查问题,通过网卡的MAC地址过滤日志,检查是否有客户的进程影响DHCP获取IP。 [*]若依然无法解决,请联系客服,寻求技术支持,检查CAN节点。
  • [技术干货] 弹性IP ping不通?
    问题描述用户购买弹性IP并绑定华为云提供的弹性云服务器后,无法ping通弹性IP,或者弹性云服务器ping不通外网。 处理方法 [*]查询IP是否被防火墙封堵,通过http://10.44.100.115:8000/查询该弹性IP是否被封堵。 [*]检查安全组规则。检查弹性云服务器网卡对应的安全组是否放通了“入方向”的“ICMP”规则。满足下图中任意一条规则即可。 [*]检查“ 网络ACL”规则。 [*]目前华为云华东区和华南区上线了“网络ACL”功能,如果主机在华东区或者华南区,需要排查“网络ACL”是否放通。查看“网络ACL”状态,图 1 网络ACL开启状态表示网络ACL当前为开启状态,图 2 网络ACL关闭状态表示网络ACL当前为关闭状态。图1 网络ACL开启状态图2 网络ACL关闭状态 [*]检查“弹性IP”绑定的网卡是否在“网络ACL”关联的子网下,请按照图3、图4、图5进行操作检查。图3 关联子网图4 入方向图5 出方向 [*]若“网络ACL”为“开启”状态,需要添加ICMP放通规则进行流量放通。说明: 需要注意“网络ACL”的默认规则是丢弃所有出入方向的包,若关闭“网络ACL”后,其默认规则仍然生效。 [*]确认弹性云服务器内默认路由是否存在。 [*]登录弹性云服务器,执行如下命令,查看是否存在默认路由。ip route [*]若没有该路由,执行如下命令,添加默认路由。ip route add default via XXXX dev eth0说明: XXXX表示网关IP。 [*]相同区域主机进行ping测试。在相同区域的弹性云服务器去ping没有ping通的弹性IP,如果可以正常ping通说明虚拟网络正常,请联系基础网络技术支持进行处理。 [*]使用站长工具进行ping测试。 [*]登录站长工具网站[color=color:windowtext] http://ping.chinaz.com/122.112.197.21。 [*]输入弹性IP,单击“Ping检测”。 [*]如果大部分监测点能ping通,请客户检查本地网络。 [*]在esight上查看该弹性IP的流量监控。登录esight查看该弹性IP的流量,排查IP的带宽是否打满。 [*]弹性云服务器内部排查。 [*]确认弹性云服务器是否为多网卡,如果为多网卡且弹性IP绑定在非主网卡上,需要在弹性云服务器内部配置策略路由。 [*]登录弹性云服务器,查看网卡是否创建,且网卡是否获取私有IP地址。如果无法通过用户设置的密码登录弹性云服务器,请联系负责镜像的技术支持人员获取默认密码登录。 [*]如果网卡没有正确创建,请联系负责操作系统的技术支持人员进行排查。 [*]如果网卡已经创建,但是没有获取私有IP地址,请参见“Cloud BU知识库模版-问题排查方法-(DHCP无法正常获取内网IP)”进行排查。 [*]执行如下命令,查看弹性云服务器的CPU占用率是否冲高。top [*]如果弹性云服务器的操作系统是linux系统,执行如下命令,查看弹性云服务器内部是否有安全规则所限制。iptables-save [*]如果弹性云服务器的操作系统是windows系统,请排查弹性云服务器的防火墙是否有限制。 [*]端口不通排查。 [*]如果弹性云服务器的ping测试没有问题,但是访问特定端口不通,且端口在图6、图7范围内,由于以下端口被运营商封堵,用户需要更换服务端口。图1 端口范围1图1 端口范围2 [*]如果不能访问弹性云服务器的特定端口,需要排查安全组规则以及“网络ACL”是否对服务端口放行。 [*]登录弹性云服务器,执行以下命令,查看弹性云服务器内部是否在该端口进行监听。 [*]netstat –na | grep XXX>说明: XXX表示端口号。
  • [热门活动] 【华为云社区 18年3月刊】云网络重磅干货不容错过!悬赏华为云问答“最强大脑”活动...
    摘要】 汇聚云上最新鲜最热门资讯。网罗大咖分享、云问答、云视频、技术干货、推荐博主、热门版块... ​ 【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • [技术干货] 学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(下)
    本帖最后由 难易 于 2018-4-3 10:56 编辑 作者:钟成 华为云PaaS领域专家,对kubernetes及etcd比较了解,从2014年开始设计实现PaaS平台及容器集群产品 文章较长,特分成上下两篇发送,上篇请参看: 第一部分:学习索引结构的一些案例——Jeff Dean在SystemML会议上发布的论文(上) 3. RM索引(Recursive-model,递归模型) 为了克服挑战并探索模型作为索引替代或丰富的潜力,我们开发了学习索引框架 (LIF),递归模型索引(RMI)和基于标准误差的搜索策略。 我们主要关注简单的全连接神经网络,因为它们的简单性,但其他许多类型模型也是可能的。 3.1 学习索引框架(LIF) LIF可以看作是一个索引合成系统或者说索引工厂; 给定一个索引规范, LIF生成不同的索引配置,优化它们并自动化测试它们。 虽然LIF可以即时学习简单模型(例如,线性回归模型),但它依赖于更复杂模型(例如NN)的Tensorflow。 但是,它从不使用Tensorflow进行推理。 相反,给定一个经过训练的Tensorflow模型, LIF会自动从模型中提取所有权重,并根据模型规范在C ++中生成高效的索引结构。 虽然使用XLA的Tensorflow已经支持代码编译,但其重点主要放在大规模计算上,其中模型的执行时间量级是微秒或毫秒。 相比之下,我们的代码生成专注于小型模型,因此必须消除Tensorflow管理大模型的开销。 这里我们利用来自[ 21 ]的想法,它已经展示了如何避免Spark运行时不必要的开销。 因此,我们能够执行30纳秒级的简单模型。 3.2 递归模型索引 如第2.3节所述,构建替代B树的替代学习模型的关键挑战之一是最后一英里的准确性。 例如,使用单个模型把误差从100M减少到几百这个数量级是非常困难的。 同时,将误差从100M降低到10K,例如100 * 100 = 10000的精度实现起来还简单些,这样就可以用简单模型替换B-Tree的前两层。 同样的,将误差从10k降低到100是一个更简单的问题,因为模型只需要关注数据的一个子集。 基于这种观察并受到专家们的共同努力[ 51]的启发,我们提出了递归回归模型(参见图[3])。 也就是说,我们构建了一个模型层次结构,其中模型的每个阶段都将键(Key)作为输入,并基于它选择另一个模型,直到最终预测到位置。 更正式地说,对于我们的模型f(x) ,其中x是键, y∈ [ 0 , N )位置,我们假设在阶段ℓ有M个模型。 我们在阶段0训练模型, $$f_0(x) ≈y$$ 。 因此,阶段ℓ中的模型k,可以写成由$$f_ℓ^{(k)}$$表示 ,并且被损失地训练,整个误差可以表示为如下公式:13578注意,我们在这里使用这里的符号$$f_{ℓ-1}(x)$$递归执行,这样13579总而言之,我们用迭代地训练每个阶段,误差为$$L_ℓ$$,以建立完整的模型。13580图3:分阶段模型 理解多个不同模型的一种方法是,每个模型都会对关键位置进行一定的预测误差,并使用预测来选择下一个模型,该模型负责将键(Key)空间的某个区域以较低的误差做出更好的预测。 然而,要注意,递归模型索引不是树 。 如图[ 3 ]所示,一个阶段的不同模型可能会在下面的阶段选择相同的模型。 此外,每个模型并不一定像B-Tree那样包括同样数量的记录(即页面大小为100的B树覆盖100个或更少的记录)。 4 最后,取决于所使用的模型,不同阶段之间的预测不一定会被解释为位置估计,而应该被视为挑选对某些键有更多认知的专家(另见[ 51 ] )。 这种模型体系结构有几个好处:(1)它利用了这一事实,即易于学习数据分布的整体形状。(2)它的体系结构有效地将空间划分为更小的子空间,就像B树/决策树那样,通过更少的操作更容易地实现所需的“最后一英里”精度。 (3)在阶段之间不需要搜索过程。 例如, 模型1.1的输出y是一个偏移量,它可以直接用于在下一阶段中选择模型。 这不仅减少了管理数据结构的指令数量,而且还允许将整个索引表示为稀疏矩阵乘法跑到TPU / GPU上。 3.3 混合索引 递归模型索引的另一个优点是,我们能够建立模型的混合。 例如,在顶层,一个小的ReLU神经网络可能是最好的选择,因为它们通常能够学习大范围的复杂数据分布,模型层次结构底部的模型可能有数千个简单的线性回归模型,因为它们在空间和执行时间都不贵。 此外,如果数据特别难以学习,我们甚至可以在最后阶段使用传统的B树。 对于本文,我们只关注2种模型,简单的神经网络,具有0到2个完全连接的隐藏层和ReLU激活函数,以及多达32个神经元和B树(也就是决策树)的层宽度。 给定一个索引配置,它指定阶段的数量和每个阶段的模型数量作为一个数组,混合索引的端到端训练按照算法1完成 13581 从整个数据集(第3行)开始,它首先训练顶级节点模型。 根据这个顶级节点模型的预测,它会从下一阶段(第9行和第10行)中选取模型,并添加属于该模型的所有键(第10行)。 最后,在混合指标的情况下,如果绝对最小/最大误差高于预定义阈值(第11-14行),则通过用B树代替NN模型来优化指数。 请注意,我们在最后阶段为每个模型存储标准误差和最小误差和最大误差。 这样做的好处是,我们可以根据每个键(Key)的使用模型单独限制搜索空间。 此外,人们可能会想知道具体如何设置混合端到端训练的各种参数,包括阶段的数量和宽度,神经网络配置(即隐藏层数和宽度)以及何时替换节点的阈值为一棵B树。 通常,这些参数可以使用简单的网格搜索进行优化。 此外,可以根据时间来限制搜索空间(找到这些参数)。 例如,我们发现阈值为128或256(B树的典型页面大小)效果很好。 此外,对于CPU,我们基本负担不起1或2个完全连接的隐藏层以及每层8至128个神经元的神经网络。 最后,考虑到模型的容量较低,可以用较小的数据样本训练较高层的阶段的模型,这显然加快了培训过程。 请注意,混合索引允许我们将学习索引的最差情况性能与B树的性能相关联。 也就是说,在学习不到数据分布的情况下,所有模型都会被B-Trees自动替换,实际上是一个完整的B-Tree(阶段之间有一些额外的开销等等,但是性能是总体相似)。 3.4 搜索策略 要在叶页中查找实际记录,对于小数据量,无论是二进制搜索还是全量扫描通常都是最快的策略; 尽管(业内)作出了许多尝试,但反复的结果表明, 其他搜索策略由于其额外的复杂性而没有提供什么(如果有的话)益处[ 8 ]) ] 。 再一次,学习索引在这里也可能具有优势:模型实际上预测了键(Key)的位置,这可能更接近值记录(Value)的实际位置,而用最小/最大误差会差的更远些。 这就是说,如果我们可以利用这样一个事实,即在位置估计最小误差和最大误差范围内,我们对位置进行了良好估计,那么我们可能能够找到记录(或=查找键的键)比传统的二进制搜索更快。 因此我们制定了几种搜索策略。 模型二进制搜索:我们的默认搜索策略,和传统的二分搜索策略的唯一区别在于,把第一个中间点设为模型预测的值。 偏见搜索:这种搜索策略修改了我们的模型二分搜索,在每次迭代中不会平均分割从中间点到左侧和右侧的距离。 相反,新中间值取决于最后阶段的模型的输出的标准偏差σ 。 例如,如果确定键(Key)大于中间值 ,则将新中间值设置为 min(middle+σ,(middle+right)/2)。 偏见四元搜索:最后,我们开发了一种新的搜索策略,在任何迭代中都不会选择一个新的中间值来进行二分搜索,而是用了三个新的数据点,即所谓的四元搜索。 研究人员过去尝试四元搜索的主要原因是因为它可以提供更好的预取行为。 也就是说,首先计算三个“中间”点,由使用CPU intrinsics来计算。 之后才会测试不同的“中间”点,并根据结果进行搜索的下一次迭代,非常类似于二分查找。 如果CPU能够从主存储器(Memory)中并行获取多个数据地址,那么这种策略可能更好,但据报道实际上这种策略大部分与二进制搜索相同[ 8 ] 。 然而,再次有一个更好的位置估计可能会有所帮助:也就是说,我们将我们最初的三个四元搜索中点定义为pos - σ , pos , pos + σ 。 我们假设,大部分预测都是准确的,首先关注位置估计,然后继续传统的四元搜索。 3.5 索引字符串 我们主要关注索引真正有值记录(Value)的键(Key),但许多数据库依赖索引字符串,幸运的是,有不少重要的机器学习研究聚焦在字符串建模上。 和以前一样,我们需要设计一个高效但有表现力的字符串模型。 对字符串做好这个设计会带来许多独特的挑战。 第一个设计考虑是如何将字符串转换为模型的特征,通常称为标记化。 为了简单和高效,我们认为n长度的字符串是长度为$$x∈R^n$$的特征向量,其中$$x_i$$是第i位的字符的ASCII十进制值(或者取决于字符串的Unicode十进制值)。 此外,如果所有输入的尺寸相同,大多数ML模型的运行效率会更高。 因此,我们将设置最大输入长度N。 由于数据按字典顺序排序,我们将在标记化之前将键截断为长度N. 对于长度为n N的字符串,我们为i > n设置$$x_i = 0$$ 。 为了提高效率,我们通常采用与我们针对数据特征相似的建模方法。 我们学习了一个相对较小的前馈神经网络的层次结构。 一个区别是输入不是一个单一的实数值x,而是一个向量x 。 线性模型w⋅x + b随着输入长度N线性地增加乘法和加法的计算数量。 前馈神经网络,带有一个宽度为h的隐藏层,也会扩展到O(hN)乘法和加法计算数量。(在与N无关的更深层网络中可能会有额外的复杂性)。 这种方法有一些有趣的特性,表明了设计字符串CDF的一般ML模型的困难。 如果我们考虑长度为三的八个字符串,字符串里面的字符是[0,8) ,那么我们可以容易地对位置建模为 $$4 x_0 + 2 x_1 + x _2^5$$ 。 但是,如果我们看看Unix字典的编码,我们会发现数据更加的复杂。 以“s”以“e”开头的单词是其他单词的三倍,这样甚至对单词里面的第一个字符就没法线性建模。 此外,字符之间存在相互作用 - 大约10%以“s”开头的单词以“sh”开头,而以“e”开头的单词只有0.1%以“eh”开头. DNN算法,如果足够宽或足够深,可以成功地对这些相互作用进行建模,更常见的是,递归神经网络(RNN)在建模文本中显示出非常成功。 最终,我们相信未来会有相当好的研究可以优化字符串的学习索引。 例如,我们可以轻松想象其他标记化算法。 在字符串标记化的自然语言处理方面有大量研究将字符串分解为ML模型中更有用的部分,例如机器翻译中的字词[ 59] 。 此外,还有大量关于特征选择的研究选择最有用的特征子集,从而限制模型需要处理的特征的数量。 此外,GPU和TPU需要相对较大的模型,因此可以无缝扩展字符串长度增加的场景,及许多更复杂的模型体系结构(例如递归和卷积神经网络)中。 3.6结果 为了将学习指标与B树进行比较,我们在3个实际数据集上创建了4个二级索引:(1)Weblogs,(2)地图数据集[ 46]和(3)web文档以及1个合成数据集(4)正态对数。 Weblogs数据集包含200 M日志条目,是多年来对主要大学网站的每个web请求,并对唯一时间戳进行主索引。 该数据集对于学习索引来说几乎是一种最坏的情况,因为它包含由课程安排,周末假期,午餐休息,部门活动,学期休息等引起的非常复杂的时间模式,这是众所周知的难以学习的。 对于地图数据集,我们将世界各地≈200M用户维护特征(例如道路,博物馆,咖啡店)的经度编入索引。 不出所料,位置的经度相对线性,并且比weblog数据集的不规则性更少。 web文档数据集由大型互联网公司的真实产品组成部分的大型网络索引的10 M个非连续文档ID组成。 最后,为了测试索引如何处理重尾分布,我们生成了一个从μ = 0和σ = 2的对数正态分布中抽取的190M独特值的综合数据集。 这些值被放大到整数1Billon。 这些数据当然是高度非线性的,这使得CDF使用神经网络学习更加困难。 对于所有数据集,我们使用不同页面大小的B树和不同的第二阶段大小(即10k,50k,100k和200k模型数量)的RMI学习索引进行比较。 我们的B树实现类似于stx :: btree,但做了进一步的行缓存优化,在一个针对FAST的微基准[ 36]对比测试中性能很强,在这个测试中把我们的B-树和一个把SIMD优化用的出神入化的B树作比较,跑起来差不多。我们使用简单的网格搜索,基于简单模型来调整两阶段模型。 也就是说,我们只尝试了具有零到两个隐藏层的神经网络和层数为4到32个节点的神经网络。 一般而言,我们发现,对于第一阶段而言,简单的(0隐藏层)到半复杂(2隐藏层,8或16宽)模型效果最好。 对于第二阶段来说,它变成了我们的简单(0隐藏层),它们基本上是线性模型,具有最佳性能。 这并不令人惊讶,因为对于最后一英里来说,执行复杂模型往往是不值得的,线性模型可以被最优学习。最后,我们所有学习的索引模型都使用LIF进行编译,并且我们只显示具有32GB RAM的Intel-E5 CPU上性能最佳的模型的数字, 而不使用 GPU / TPU,进行超过30M次的查找,重复4次。 加载时间:虽然本文的重点不在加载或**时间,但应该注意的是,大多数模型可以训练得相当快。 例如,如果在C ++中实现,那么无需隐藏层的模型可以在几秒钟内在超过200M条记录上进行训练。 但是,对于更复杂的模型,我们选择使用Tensorflow,由于其开销,花费了更长的时间。然而,我们相信我们可以相对较快地对超参数空间进行网格搜索,大约需要分钟数量级跑简单模型。 此外,可以使用诸如[ 52 ]之类的自动调整技术来进一步缩短查找最佳索引配置所需的时间。 3.6.1 整数数据集13583 图4:地图数据:学习索引与B-Tree13584图5: Web日志数据:学习索引与B-Tree13585图6:正态分布的对数数据集:学习索引与B-Tree 图[4],图[5]和图[6]分别显示了两个真实世界整数数据集(地图和博客)和合成数据(对数正态数据)的结果。 作为主要指标,我们将总查找时间分解为模型执行(B树遍历或ML模型)和本地搜索时间(例如,在B树叶子页面中查找键(Key))。 另外,我们记录了索引结构的大小(不包括排序数组的大小),空间节省和模型误差及其误差方差。 模型误差是最后阶段所有模型的平均标准误差,而误差方差则表明这些标准误差在模型之间有多大变化。 请注意,对于B-Tree而言,由于没有阶段,所以它始终是一个取决于页面大小的固定误差。 加速和大小列中的颜色编码指示索引相对于页面大小为128的高速缓存优化的B树索引的基线有多快或多慢(更大或更小)。 可以看出,在几乎所有配置中,学习索引比B树要快,速度提高了3 倍 ,并且达到了数量级的更小。 当然,B树可以以CPU时间为代价进一步压缩以进行解压缩。 然而,大多数优化不仅是正交的(可以用在神经网络上),而且对于神经网络来说,存在更多的压缩潜力。 例如,神经网络可以通过使用4或8位整数而不是32或64位浮点值来表示模型参数(一种称为量化的过程)进行压缩。 与B树压缩技术相反,这实际上可以进一步加速计算。 有趣的是,四元搜索仅对某些数据集有帮助。 例如,它对weblog和log-normal数据集有一点帮助,但对地图数据集没有帮助。 我们没有报告偏见搜索和B树,或者不同搜索策略的结果差异,因为它们没有为数字数据集提供任何好处。 值得注意的是,模型的准确性也有很大差异。 对于合成数据集和博客数据的来说,误差要高得多,这会影响搜索时间。 作为比较,我们搞了一个学习索引,有更复杂的第一阶段模型(“学习索引复合体”),该索引有2层完全连通的隐藏层和每层16个神经元,可以大幅的减少误差。 然而,在CPU上,模型的复杂性并没有得到回报(例如,模型执行时间太长,无法证明搜索时间较短)。 然而,正如前面提到了GPU / TPU的发展,这种trade-off会被改变,我们推测下一代硬件对更复杂的模型有利。 可以观察到,第二阶段大小(模型数量)对索引大小和查找性能具有显着影响。 这并不奇怪,因为第二阶段决定了需要存储多少个模型。 值得注意的是,我们的第二阶段使用了10,000或更多的模型。 这在第[2.1]节的分析中特别令人印象深刻,因为它表明我们的第一阶段模型可以比B树中的单个节点在精度上有更大的提高。 最后,我们没有提到整数数据集的上跑任何混合模型,因为它们像偏见搜索一样没有提供任何好处。 3.6.2 字符串数据集13586图7:字符串数据:学习索引与B-Tree13587图8:使用不同搜索策略的学习字符串索引 图[7]显示了不同的搜索策略。 但是,我们确实在表格中看到最佳模型是一个非混合RMI模型索引,使用四元搜索策略,名为“Learned QS”(表格底部)。 所有RMI索引在第二阶段使用10,000个模型,对于混合索引,我们使用两个阈值128和64,作为模型在用B-Tree替换自己之前的最大容许绝对误差。 可以看出,用于字符串的B-Trees学习索引的加速不再那么突出。 这因为一个事实——模型执行相当昂贵,这是GPU / TPU可以解决的问题。 此外,搜索字符串要昂贵得多,因此更高的精确度通常会得到更好的结果。 这就导致了混合索引通过B树取代表现不佳的模型,有助于提高性能。 最后,由于搜索成本的不同,如图[8]所示,对于具有一个或两个隐藏层的2级神经网络模型,不同的搜索策略会产生更大的差异。 请注意,我们没有为B树显示不同的搜索策略,因为它们没有提高性能。 偏见搜索和四元搜索性能更好的原因是他们可以将标准误差考虑在内。 3.7未来的研究挑战 到目前为止,我们的结果集中在只读内存数据库系统的索引结构上。 正如我们已经指出的那样,即使没有任何重大修改,当前的设计已经可以替代数据仓库中使用的索引结构,这些索引结构可能每天只更新一次,或者BigTable [ 18 ] ,其中创建B树批量作为SStable合并过程的一部分。 在本节中,我们将概述如何将学习型索引结构的概念扩展到频繁**的工作负载场景下。 3.7.1 **和更新 初看起来,由于学习模型潜在的高成本,**似乎是学习索引的致命弱点,但是再次,学习索引对于某些工作负载可能具有显着的优势。 一般来说,我们可以区分两种类型的**:(1)appends 和(2) inserts in the middle,例如在订单表上更新客户id上的二级索引。 现在我们关注后者,并考虑在我们的已排序数据集中引入额外空间的方法,类似于B树通过其每个页面的最小和最大填充因子在已有页面中引入额外空间。 但是,与B树相反,假设我们不会均匀地分散空间,而是依赖于学习的累积密度函数。 最后,假设插页大致遵循与学习的CDF相似的模式; 这并不是一个不合理的假设,就像在顾客id的二级索引的例子中,顾客大致会保持购物行为。在这些假设下,模型可能根本不需要再培训。 这样,对新项目的**,学习索引可以“概括”成为O(1) 操作,因为它们可以直接放入可用空间中,并且空间可用于最常用位置。 相反,B-树需要O (log n)用于查找和重新平衡树的**操作(特别是**某个区域比其他区域更普遍)。 类似的,对于追加**,如果模型能够学习新数据的关键趋势,模型也可能不需要重新学习。 显然,这一观察结果也提出了几个问题。 首先,模型的普遍性和“最后一英里”表现似乎有一个有趣的折衷; “最后一英里”预测越好,可以说,模型过度拟合的能力越强,而且对新数据项的适应能力也越低。 其次,如果分布发生变化会发生什么? 它是否可以被检测到,并且是否有可能提供与B树一样的强力保证,它总是能够保证O(log n) 的查找和**成本? 虽然回答这个问题已经超出了本文的范围,但我们相信某些模型有可能实现它。 考虑一个简单的线性模型:在这种情况下,**的项目绝不会将误差增加超过max_abs_error + 1 。 此外,重新训练线性模型的成本为$$O(K_{M + 1})$$ ,其中$$K_{M + 1}$$是模型在数据中覆盖的项目数。如果线性模型不足以实现可接受的误差,我们可以将范围分成两个模型,并在上层的那个阶段重新训练模型。 这个模型可能需要重新训练$$O(K_{M})$$,其中$$K_{M}$$是在重新训练第一个模型之后的最后一个阶段的模型数M等等。因此,基于第一个模型的再训练,容易限制绝对误差。 但是,为了给第一个模型提供一个很好的误差,我们可能需要增加模型的容量,例如通过添加一个多项式或一个额外的隐藏层。 这里有可能通过诸如VC维度的技术再次限制所需的复杂度增加。 研究这些影响,尤其是对于其他类型的模型,包括神经网络,留待未来的人们的工作。 处理**的另一种更简单的方法是构建一个增量索引[ 49 ]和许多其他系统中,并且还具有如下优点:对于大型再训练操作,可以使用诸如GPU / TPU的专用硬件,这将显着加速,即使需要对整个模型重新训练也是如此。 最后,通过使用先前的解决方案作为起点,可以对每个模型的训练进行热启动。 特别是依赖梯度下降优化的模型可以从这种优化中获益[ 33 ] 。 3.7.2 分页 在本节中,我们假定数据(实际记录或对)存储在一个连续的块中。 但是,特别是对于存储在磁盘上的数据的索引,将数据分区为存储在磁盘上的不同区域中的较大页面是相当常见的。 为此,我们观察到一个模型学习CDF不再成立,因为$$p = F ( X Key ) * N$$被违反。 下面我们概述几个可以解决这个问题的方法: 利用RMI结构:RMI结构已经将空间划分为区域。 通过对学习过程的小修改,我们可以最大限度地减少它们覆盖的区域中模型的重叠程度。 此外,可能会复制任何可能被多个模型访问的记录。 这样我们可以简单地将偏移量存储到模型中,也就是数据存储在磁盘上的位置。 另一种选择是以的形式提供额外的转换表。 通过转换表,索引结构的其余部分保持不变。 但是,这个想法只有在磁盘页面非常大的情况下才会起作用,如果不是千兆字节,则可能在几百兆字节,翻译表格就会太大。 同时,可以使用带有最小和最大错误的预测位置来减少必须从大页面读取的字节数,这样页面大小的影响可以忽略不计。 使用更复杂的模型,实际上可以学习页面的实际指针位置。 特别是如果使用文件系统来确定磁盘上的页面,并且在磁盘上有系统编号的块(例如, block1,...,block100 ),则学习过程可以保持不变。 显然,需要更多的研究来更好地理解基于磁盘的系统的学习索引的影响。与此同时,节省的大量空间以及速度优势,会让这个工作的未来很有趣。 4. 点索引 除了范围索引之外,点查找的Hash Map在DBMS中起着类似或更重要的作用。 从概念上讲,Hash Map使用Hash函数来确定性地将键映射到数组内的随机位置(参见图[9 ],只有4位开销,但速度降低3-7倍。13588图9:传统Hash图与学习Hash图 类似于B树,机器学习模型可能会提供解决方案。 例如,如果我们可以学习一个将每个键唯一映射到数组内的唯一位置的模型,我们可以避免冲突(参见图[9] (b))。 尽管将模型学习为散列函数的想法并不新鲜,但现有工作主要集中在学习更好的散列函数以将对象从较高维空间映射到较低维空间以进行相似性搜索(即类似的对象具有相似的散列- 值) [55,57,32 ] 。 据我们所知,怎么通过学习产生更有效的点索引结构的模型,还没有被探索过。 虽然第一眼看起来似乎不可能使用机器学习模型来加速Hash Map,但如果内存空间是一个重大问题,它实际上可能是一种选择。 正如我们的实验所显示的,传统技术想达到高利用率(每个记录的小开销浪费空间小于20%)非常难以实现,而且会导致显着的性能损失。 相比之下,学习模型能够根据数据分布实现更高的利用率。 此外,还有可能将模型卸载到GPU / TPU,这可能会减轻通过散列函数执行模型的额外成本。 4.1 Hash模型索引 令人惊讶的是,学习键(Key)的CDF分布是一种潜在的得到更好散列函数的办法。 然而,与范围索引相比,我们并不打算将记录紧凑或按严格排序顺序存储。 相反,我们可以通过Hash Map的目标大小M来缩放CDF,并使用h(K) = F(K) * M ,其中的Key K作为我们的Hash函数。 如果模型F完美地学习了CDF,则不存在冲突。 此外,学习得到Hash函数与实际的Hash Map实现不冲突,并且可以与链表或任何其他方法结合使用。 对于模型体系结构,我们可以再次利用上一节中的递归模型体系结构。 很明显,和以前一样,在索引大小和性能之间存在一个折衷,这受到模型架构和数据集的影响。 请注意,Hash模型索引的**操作与正常Hash表的**方式相同:使用h(k)对密钥进行Hash处理,并将项**返回的位置。 如果该位置已被采用,则用普通Hash Map的实现确定如何处理冲突。 这意味着,只要**数据的特征与现有数据类似,散列函数就会保持其效率。 但是,如果数据分布发生变化,则可能需要按照前面所述重新训练模型。 再次,这超出了本文的范围。 4.2 结果13590图10:模型vs随机Hash Map 为了测试使用机器学习模型的Hash索引的可行性,我们徒手实现了基于链表的Hash Map; 记录(Value)直接存储在Hash表中,并且只有在冲突的情况下记录才会附加到链表。 没有冲突,最多只会发生一次缓存未命中。 只有在几个键(Key)映射到相同位置的情况下,可能会发生额外的缓存未命中。 我们选择该设计,因为它可以实现最佳查找性能。 例如,我们还测试了商业级密集Hash图,,使用桶策略和就地溢出(即,Hash Map被分成桶以最小化开销,并在桶满时使用就地溢出[ 2 ] ) 。 虽然使用这种技术可以实现更小的内存占用,但我们发现它比链表方式慢两倍。 此外,在8 %或更多的内存利用率下,密集的Hash-map在性能上进一步降低。 当然,许多进一步的(正交)优化是可能的,并且我们绝不会声称这是Hash Map的最大内存或CPU高效实现。 相反,我们的目标是展示学习Hash函数的一般潜力。 作为本实验的基准,我们使用Hash Map实现和随机Hash函数,该函数只使用两次乘法,3次移位和3次异或,这比加密Hash函数快得多。 作为我们的模型散列函数,我们在第二阶段使用了与前一节中的100k模型相同的2阶段RMI模型,没有任何隐藏层。 我们没有尝试任何其他模型,因为我们特别关注快速查找速度。 我们使用了与前一节相同的三个int数据集,并且对于所有实验,我们改变了可用插槽的数量,从75 %到125 %数据数量。 也就是说, 75 %的Hash表中的插槽比数据记录少25 % 。 强制槽数量小于数据数量,可减少Hash表中的空位,但会增加链接列表的长度。 结果如图[10] 的平均查找时间,空槽数量(GB单位)以及可用槽位总数的百分比和空间j节约的改进。 请注意,与上一节相比,我们确实包含了数据大小 。 主要原因是,为了启用1次缓存未命中查找,数据本身必须包含在Hash Map中,而在上一节中,我们只计算了除排序数组本身之外的额外索引开销。 从图中可以看出,模型Hash函数的索引总体上具有相似的性能,同时更好地利用内存。 例如,如果有100 %的插槽数(即Hash表中的插槽数与数据大小相匹配),随机Hash总会经历大约35 %的冲突(理论值为33.3 %)并浪费1.5G B的主存,而学习索引的散列函数更好地分散了密钥空间,因此能够将未使用的内存空间减少到高达80 % ,具体取决于数据集。 显然,当我们增加Hash表的大小以增加25 %的插槽时,节省量不会很大,因为Hash表也可以更好地分散键(Key)。 令人惊讶的是,如果我们将空间减少到键的数量的75 % ,由于仍然起作用的生日悖论,学习的Hash图仍然具有优势。 我们也做过更小尺寸的实验,观察到大约50 %的大小插槽数在随机和学习Hash函数之间没有明显差异。 但是,将Hash Map大小减少为仅包含数据大小的一半时隙,链表变长,查找时间也会变长。 4.3 替代方法和未来工作 除了使用CDF作为更好的散列函数外,还可以开发其他类型的模型。 虽然不在本文的范围内,但我们在某种程度上探讨了共同优化数据放置和查找数据的功能。 然而,在许多情况下,事实证明,混合模型专家模式们对于许多数据集的表现最好。 此外,也可以像混合索引一样将Hash-map与模型更紧密地结合起来。 也就是说,我们可以学习模型的几个阶段,并用简单的随机Hash函数替换性能较差的模型(即那些产生比随机Hash更多冲突的模型)。 这样,最坏的情况下的性能将与随机Hash相似。 但是,如果数据具有可以学习的模式,则可以实现更高的内存利用率。 5. 存在索引13592图11: Bloom filter作为分类问题 DBMS的最后一种通用索引类型是存在索引,最重要的是Bloom-Filters,它是一种空间高效的概率数据结构,用于测试某个元素是否为集合的成员。 它们通常用于确定低温存储中是否存在键(Key)。 例如,BigTable使用它们来确定一个密钥是否包含在SSTable [ 18 ]中 。 在内部,Bloom filter使用大小为m的位数组和k个哈希函数,每个函数将一个关键字映射到m个数组位置中的一个(参见图[12]。 虽然Bloom filter非常节省空间,但它们仍可占用大量内存。 例如,想达到具有0.1 %的假阳性率(FPR)的100M记录,需要比记录大约多14 倍的位。 因此,对于十亿个记录,大约需要大约1.76 Gigabyte个字节(十亿 = $$10^9$$ bit , 位数 = $$14 * 10^9$$ bit ≈ 1.76GB Byte )。 对于0.01 %的FPR,我们需要≈2.23 Gigabyte。 有几次尝试来提高Bloom filters的效率[ 43 ] ,但一般的开销依然存在。 然而,如果存在一些结构特性来确定什么是内部或外部的,用于学习,那么就可以构建更有效的表示。 有趣的是,对于数据库系统的存在索引,延迟和空间要求通常与我们之前看到的两种完全不同。 考虑到访问低温存储(例如磁盘甚至磁带)的高延迟,我们可以承担更复杂的模型,而主要目标是最小化索引的空间和误报的数量。 下面我们概述使用学习模型建立生存指数的两种潜在方法。13593图12:具有学习散列函数的Bloom filter 5.1 学习索引版Bloom filter 虽然范围和点索引都知道键的分布,但存在索引需要学习将键和其他所有内容分开的函数。 换言之,针对点索引的良好hash函数是密钥间几乎没有碰撞的散列函数,而Bloom filter的良好hash函数将是键(Key)间有很多冲突同时 非键(Non-Key)间也发生大量冲突的良好散列函数,但很少有键(Key)和非键(Non-Key)之间的冲突。 我们在下面考虑如何学习这样一个函数f以及如何将它合并到一个存在索引中。 传统上,存在指标不会猜测键(Key)的分布,也不会猜测键(Key)与非键(Non-Key)有什么不同。 例如,如果我们的数据库包含0≤x 5.1.1 Bloom filters作为分类问题 构建存在索引的另一种方法是作为二元分类任务。 也就是说,我们想要学习一个模型f,它可以预测一个查询x是一个键(Key)还是非键(Non-Key)。 为此,我们用这样的数据$$D = { (x_i,y_i = 1) | x_i ∈ K } ∪ {(x_i,yi) = 0)|x_i ∈ U}$$, 来训练一个神经网络。 由于这是一个二元分类任务,我们的神经网络使用 sigmoid 激活函数来产生一个概率,并通过训练以最小化对数损失, 13595 如前所述,可以选择f来匹配被索引的数据类型。 我们通常考虑递归神经网络(RNN)或卷积神经网络(CNN),因为它们已被反复证明是有效的字符串建模方式[ 54,29 ] 。 给定一个训练好的模型f ,我们如何使它成为一个有效率的存在索引?f (x) 的输出可以解释为x是我们数据库中的一个键的概率; 我们必须选择一个阈值τ,高于此阈值我们将假定键(Key)存在于我们的数据库中。 由于Bloom filter通常针对特定的FPR进行调整,因此我们可以将τ放在为在索引的查询数据集内,来动态实现所需的FPR。 与Bloom filter不同,我们的模型可能同时具有非零FPR和FNR; 事实上,随着FPR的下降,FNR将会上升。 为了保持存在索引不存在假阴性的约束,我们创建了一个溢出Bloom filter。 也就是说,我们考虑$K^- _τ= { x∈K | f (x) τ }$是f的假阴性集合,并为这个键子集创建一个Bloom filters。 然后我们可以运行我们的存在索引,如图[11]存在; 否则,检查溢出Bloom filter。 这种设置是有效的,因为学习模型相对于数据的大小可以相当小。 此外,由于Bloom filter随着键(Key)集合的大小线性缩放,溢出Bloom filter将按照FNR进行缩放。 也就是说,即使我们的假阴性率为50%,我们也会将 Bloom filter的大小减半 (不包括模型大小)。 我们将通过实验发现,这种组合在降低存在索引的内存占用方面是有效的。 最后,学习模型计算可以受益于像GPU和TPU这样的机器学习加速器,而传统的Bloom filter往往严重依赖于存储器系统的随机访问延迟。13597图13:了解的Bloom filter可以在大范围的误报率下改善内存占用。 (这里W是RNN宽度, E是每个角色的嵌入尺寸。) 5.1.2 带Hash模型的Bloom filter 在分类问题的初始化设置中,我们选择一个阈值τ并且接受f (x) ≥τ的预测将具有非零FPR,并且具有f (x)τ的预测将具有非零FNR。 这与Bloom filter中Hash函数的典型观点相矛盾,因为没有槽时应该具有非零的FNR。 我们可以使用f作为这种散列函数,通过使用它来映射到大小为m的位数组。因为如上所述, f将查询映射到范围[0,1] ,所以我们可以假设函数d对该空间进行离散化。 例如,我们可以通过$d(p) = \lfloor mp\rfloor$来最简单地定义d 。 因此,我们可以使用d(f(x))作为散列函数,就像Bloom filter中的其他函数一样。 这具有以下优点: f被训练成将大部分键(Key)映射到比特位置的较高范围以及将非键(Non-Key)映射到较低范围的比特位置。 5.2结果 为了通过实验测试这个想法,我们探索了存在索引在追踪黑名单钓鱼网址方面的应用。 我们将Google透明度报告中的数据视为我们密切关注的一组键(Key)。 该数据集由1.7M个唯一的URL组成。 我们使用的阴性(也就是不在数据集里面的)网址,其中包含随机(有效)网址和列入白名单的网址,这些网址可能会被误认为是钓鱼网页。 我们训练一个character-level的RNN(特别是GRU [ 19 ] )来预测URL属于哪一组。 具有期望1%FPR的常规Bloom filter需要2.04MB。 我们考虑一个16维GRU,每个角色(character)都有32维嵌入; 这个模型的大小是0.0259MB。 我们发现,如果我们想强制执行1%的FPR,TNR是49%。 如上所述,我们的Bloom filter的大小与FNR(51%)一致。 因此,我们发现我们的模型+溢出Bloom filter使用了1.07MB,大小减少了47%。 如果我们想强制执行0.1%的FPR,我们的FNR为71%,这使Bloom Filter的总大小从3.06MB降至2.2MB,减少了28%的内存。 我们观察图[13中的]这种一般关系。 有趣的是,我们看到不同的尺寸模型如何在不同的精度和内存之间取得平衡。 显然,我们的模型越精确,Bloom filter尺寸的节省就越好。 其中一个有趣的特性是我们的模型没有理由需要使用与Bloom filter相同的功能。 例如,已经有重要的研究在使用ML来预测一个网页是否是一个钓鱼页面[ 10,13 ] 。 其他功能,如WHOIS数据或IP信息可以纳入模型,提高准确性,减少Bloom filter的大小,并保持没有误报的属性。 6. 相关工作 学习索引的思想建立在机器学习和索引技术的广泛研究之上。 以下,我们重点介绍最重要的相关领域。 B树和变体:在过去的几十年中,已经提出了各种不同的索引结构[ 28 ] 。 然而,所有这些方法都与学习索引的思想是正交的,因为他们都没有从数据的分布中学习,以实现更紧凑的指数表示或性能收益。 与此同时,正如我们的混合索引,可以将现有的硬件觉察索引策略与学习模型更紧密地结合起来,以获得进一步的性能提升。 由于B +树消耗大量内存,所以在压缩索引方面也有很多工作,如前缀/后缀截断,字典压缩,键(Key)规范化[ 28,25,45] )。 有趣的是,一些现有的压缩技术与我们的方法相辅相成,可以帮助进一步提高效率。 例如,字典压缩可以看作是一种嵌入形式(即将一个字符串表示为一个唯一的整数)。 可能与本文最相关的是A-树 [ 24 ]提出在B树页面内使用插值搜索。 然而,学习索引更进一步,并建议使用学习模型替换整个索引结构。 最后,像Hippo [ 60 ]这样的稀疏索引都存储有关值范围的信息,但又不利用数据分布的基础属性。 更好的Hash函数:类似于基于树的索引结构的工作,在散列图和散列函数方面有很多工作[ 40,57,56,48]明确映射到哈希映射内的有限插糟集合的目标。 Bloom-Filters:最后,我们的存在索引直接建立在Bloom-Filters的现有工作上[ 22,11 ] 。 然后,我们的工作通过提出一个bloom-filter增强分类模型或者使用模型作为特殊的散列函数,来对问题采取不同的观察方式,这里的优化目标与我们为Hash Map创建的散列模型完全不同。 简洁数据结构:在学习索引和简洁数据结构之间存在着一个有趣的联系,特别是诸如小波树的排序选择字典[ 31,30 ] 。 然而,许多简洁的数据结构集中于H0熵(即,对索引中的每个元素进行编码所需的位数),而学习的索引尝试学习基础数据分布以预测每个元素的位置。 因此,学习的索引可能实现更高的压缩率,因为H0熵可能以较慢的操作为代价。 此外,对于每个用例,通常都必须仔细构造简洁的数据结构,而学习的索引通过机器学习“自动化”这一过程。 然而,简洁数据结构可能为进一步研究学习指标提供了一个框架。 CDF建模:我们的范围和点索引模型都与累积分布函数(CDF)的模型密切相关。 CDF计算是个非平庸的问题,并且已经在机器学习社区[ 41 ] 。 然而,大多数研究集中在对概率分布函数(PDF)进行建模,留下许多关于如何有效建模CDF的开放式问题。 专家混合体:我们的RM-I体系结构跟随了一系列有关为数据子集建立专家的研究[ 42 ] 。 正如我们在我们的配置中看到的那样,它很好地让我们能够解耦模型大小和模型计算,从而实现更复杂的模型,让这些模型的执行起来没那么昂贵。 7 结论和未来工作 我们表明,学习索引可以通过利用索引数据的分布特性来提供明显的好处。 这为许多有趣的研究问题打开了大门。 多维索引:可以说,学习索引理念最令人兴奋的研究方向是将其扩展到多维索引结构。 模型,特别是神经网络,非常擅长捕捉复杂的高维关系。理想情况下,这个模型能够估计任何属性组合过滤的所有记录的位置。 超越索引:学习算法也许令人惊讶的是,CDF模型也有加速排序和join的潜力,而不仅仅是索引。 例如,加速排序的基本思想是使用现有的CDF模型F将记录大致按排序顺序排列,然后修正几乎完美排序的数据,例如使用**排序。 GPU / TPU 最后,正如在本文中多次提到的那样,GPU / TPU将使学习索引的思想更加可行。 同时,GPU / TPU也有其最大的挑战,最重要的是高调用延迟。 虽然可以合理地假设,由于前面所示的异常压缩比,所有已学习的索引可能适用于GPU / TPU,但仍需要2-3微秒才能对其进行任何操作。 同时,机器学习加速器与CPU的集成越来越好[ 6,4 ],并且使用批处理请求等技术可以分摊调用成本,因此我们不相信调用延迟是一个真正的障碍。 总之,我们已经证明,机器学习模型有可能比最先进的数据库索引提供显着的优势,并且我们相信这个方向将在未来结出美妙研究成果。 参考文章 [*]Google’s sparsehash. https://github.com/sparsehash/sparsehash-c11. [*]Google’s sparsehash documentation. https://github.com/sparsehash/sparsehash/blob/master/src/sparsehash/sparse_hash_map. [*]An in-depth look at googles first tensor processing unit (tpu). https://cloud.google.com/blog/big-data/2017/05/an-in-depth-look-at-googles-first-tensor-proc essing-unit-tpu. [*]Intel Xeon Phi. https://www.intel.com/content/www/us/en/products/processors/xeon-phi/xeon-phi-processors.html. [*]Moore Law is Dead but GPU will get 1000X faster by 2025. https://www.nextbigfuture.com/2017/06/moore-law-is-dead-but-gpu-will-get-1000x-faster-by-2025.html. [*]NVIDIA NVLink High-Speed Interconnect. http://www.nvidia.com/object/nvlink.html. [*]NVIDIA TESLA V100. https://www.nvidia.com/en-us/data-center/tesla-v100/. [*]Trying to speed up binary search. http://databasearchitects.blogspot.com/2015/09/trying-to-speed-up-binary-search.html. [*]M. Abadi, P. Barham, J. Chen, Z. Chen, A. Davis, J. Dean, M. Devin, S. Ghemawat, G. Irving, M.Isard, et al. Tensorflow: A system for large-scale machine learning. In OSDI, volume 16, pages 265–283, 2016. [*]S. Abu-Nimeh, D. Nappa, X. Wang, and S. Nair. A comparison of machine learning techniques for phishing detection. In Proceedings of the anti-phishing working groups 2nd annual eCrime researchers summit, pages 60–69. ACM, 2007. [*]K. Alexiou, D. Kossmann, and P.-A. Larson. Adaptive range filters for cold data: Avoiding trips to siberia. Proc. VLDB Endow., 6(14):1714–1725, Sept. 2013. [*]M. Athanassoulis and A. Ai**ki. BF-tree: Approximate Tree Indexing. In VLDB, pages 1881–1892, 2014. [*]R. B. Basnet, S. Mukkamala, and A. H. Sung. Detection of phishing attacks: A machine learning approach. Soft Computing Applications in Industry, 226:373–383, 2008. [*]R. Bayer. Symmetric binary b-trees: Data structure and maintenance algorithms. Acta Inf., 1(4):290–306, Dec. 1972. [*]R. Bayer and E. McCreight. Organization and maintenance of large ordered indices. In Proceedings of the 1970 ACM SIGFIDET (Now SIGMOD) Workshop on Data Description, Access and Control, SIGFIDET ’70, pages 107–141, New York, NY, USA, 1970. ACM. [*]M. Böhm, B. Schlegel, P. B. Volk, U. Fischer, D. Habich, and W. Lehner. Efficient in-memory indexing with generalized prefix trees. In Datenbanksysteme für Business, Technologie und Web (BTW), 14. Fachtagung des GI-Fachbereichs ”Datenbanken und Informationssysteme” (DBIS), 2.-4.3.2011 in Kaiserslautern, Germany, pages 227–246, 2011. [*]J. Boyar and K. S. Larsen. Efficient rebalancing of chromatic search trees. Journal of Computer and System Sciences, 49(3):667 – 682, 1994. 30th IEEE Conference on Foundations of Computer Science. [*]F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes, and R. Gruber. Bigtable: A distributed storage system for structured data (awarded best paper!). In 7th Symposium on Operating Systems Design and Implementation (OSDI ’06), November 6-8, Seattle, WA, USA, pages 205–218, 2006. [*]K. Cho, B. van Merrienboer, Ç. Gülçehre, D. Bahdanau, F. Bougares, H. Schwenk, and Y. Bengio. Learning phrase representations using RNN encoder-decoder for statistical machine translation. In Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing, EMNLP 2014, October 25-29, 2014, Doha, Qatar, A meeting of SIGDAT, a Special Interest Group of the ACL, pages 1724–1734, 2014. [*]J. G. Cleary. Compact hash tables using bidirectional linear probing. IEEE Trans. Computers, 33(9):828–834, 1984. [*]A. Crotty, A. Galakatos, K. Dursun, T. Kraska, C. Binnig, U. Çetintemel, and S. Zdonik. An architecture for compiling udf-centric workflows. PVLDB, 8(12):1466–1477,2015. [*]B. Fan, D. G. Andersen, M. Kaminsky, and M. D. Mitzenmacher. Cuckoo filter: Practically better than bloom. In Proceedings of the 10th ACM International on Conference on Emerging Networking Experiments and Technologies, CoNEXT ’14, pages 75–88, New York, NY, USA, 2014. ACM. [*]E. Fredkin. Trie memory. Commun. ACM, 3(9):490–499, Sept. 1960. [*]A. Galakatos, M. Markovitch, C. Binnig, R. Fonseca, and T. Kraska. A-tree: A bounded approximate index structure. under submission, 2017. [*]J. Goldstein, R. Ramakrishnan, and U. Shaft. Compressing Relations and Indexes. In ICDE, pages 370–379, 1998. [*]I. Goodfellow, J. Pouget-Abadie, M. Mirza, B. Xu, D. Warde-Farley, S. Ozair, A. Courville, and Y. Bengio. Generative adversarial nets. In Advances in neural information processing systems, pages 2672–2680, 2014. [*]G. Graefe. B-tree indexes, interpolation search, and skew. In Proceedings of the 2Nd International Workshop on Data Management on New Hardware, DaMoN ’06, New York, NY, USA, 2006. ACM. [*]G. Graefe and P. A. Larson. B-tree indexes and CPU caches. In Proceedings 17th International Conference on Data Engineering, pages 349–358, 2001. [*]A. Graves. Generating sequences with recurrent neural networks. arXiv preprint arXiv:1308.0850, 2013. [*]R. Grossi, A. Gupta, and J. S. Vitter. High-order entropy-compressed text indexes. In Proceedings of the Four**th Annual ACM-SIAM Symposium on Discrete Algorithms, SODA ’03, pages 841–850, Philadelphia, PA, USA, 2003. Society for Industrial and Applied Mathematics. [*]R. Grossi and G. Ottaviano. The wavelet trie: Maintaining an indexed sequence of strings in compressed space. In Proceedings of the 31st ACM SIGMOD-SIGACT-SIGAI Symposium on Principles of Database Systems, PODS ’12, pages 203–214, New York, NY, USA, 2012. ACM. [*]J. Guo and J. Li. CNN based hashing for image retrieval. CoRR, abs/1509.01354, 2015. [*]G. E. Hinton, O. Vinyals, and J. Dean. Distilling the knowledge in a neural network. CoRR,abs/1503.02531, 2015. [*]J. C. Huang and B. J. Frey. Cumulative distribution networks and the derivative-sum-product algorithm: Models and inference for cumulative distribution functions on graphs. J. Mach. Learn. Res., 12:301–348, Feb. 2011. [*]K. Kaczmarski. B + -Tree Optimized for GPGPU. [*]C. Kim, J. Chhugani, N. Satish, E. Sedlar, A. D. Nguyen, T. Kaldewey, V. W. Lee, S. A. Brandt, and P. Dubey. Fast: Fast architecture sensitive tree search on modern cpus and gpus. In Proceedings of the 2010 ACM SIGMOD International Conference on Management of Data, SIGMOD ’10, pages 339–350, New York, NY, USA, 2010. ACM. [*]T. Kissinger, B. Schlegel, D. Habich, and W. Lehner. Kiss-tree: Smart latch-free in-memory indexing on modern architectures. In Proceedings of the Eighth International Workshop on Data Management on New Hardware, DaMoN ’12, pages 16–23, New York, NY, USA, 2012. ACM. [*]T. J. Lehman and M. J. Carey. A study of index structures for main memory database management systems. In Proceedings of the 12th International Conference on Very Large Data Bases, VLDB ’86, pages 294–303, San Francisco, CA, USA, 1986. Morgan Kaufmann Publishers Inc. [*]V. Leis, A. Kemper, and T. Neumann. The adaptive radix tree: Artful indexing for main-memory databases. In Proceedings of the 2013 IEEE International Conference on Data Engineering (ICDE 2013), ICDE ’13, pages 38–49, Washington, DC, USA, 2013. IEEE Computer Society. [*]W. Litwin. Readings in database systems. chapter Linear Hashing: A New Tool for File and Table Addressing., pages 570–581. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 1988. [*]M. Magdon-Ismail and A. F. Atiya. Neural networks for density estimation. In M. J. Kearns, S.A. Solla, and D. A. Cohn, editors, Advances in Neural Information Processing Systems 11, pages 522–528. MIT Press, 1999. [*]D. J. Miller and H. S. Uyar. A mixture of experts classifier with learning based on both labelled and unlabelled data. In Advances in Neural Information Processing Systems 9, NIPS, Denver, CO, USA, December 2-5, 1996, pages 571–577, 1996. [*]M. Mitzenmacher. Compressed bloom filters. In Proceedings of the Twentieth Annual ACM Symposium on Principles of Distributed Computing, PODC 2001, Newport, Rhode Island, USA, August 26-29, 2001, pages 144–150, 2001. [*]G. Moerkotte. Small Materialized Aggregates: A Light Weight Index Structure for Data Warehousing. In VLDB, pages 476–487, 1998. [*]T. Neumann and G. Weikum. RDF-3X: A RISC-style Engine for RDF. Proc. VLDB Endow., pages 647–659, 2008. [*]OpenStreetMap database ©OpenStreetMap contributors. https://aws.amazon.com/public-datasets/osm. [*]J. Rao and K. A. Ross. Making b+- trees cache conscious in main memory. In Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data, SIGMOD ’00, pages 475–486, New York, NY, USA, 2000. ACM. [*]S. Richter, V. Alvarez, and J. Dittrich. A seven-dimensional analysis of hashing methods and its implications on query processing. Proc. VLDB Endow., 9(3):96–107, Nov. 2015. [*]D. G. Severance and G. M. Lohman. Differential files: Their application to the maintenance of large data bases. In Proceedings of the 1976 ACM SIGMOD International Conference on Management of Data, SIGMOD ’76, pages 43–43, New York, NY, USA, 1976. ACM. [*]A. Shahvarani and H.-A. Jacobsen. A hybrid b+-tree as solution for in-memory indexing on cpu-gpu heterogeneous computing platforms. In Proceedings of the 2016 International Conference on Management of Data, SIGMOD ’16, pages 1523–1538, New York, NY, USA, 2016. ACM. [*]N. Shazeer, A. Mirhoseini, K. Maziarz, A. Davis, Q. Le, G. Hinton, and J. Dean. Outrageously large neural networks: The sparsely-gated mixture-of-experts layer. arXiv preprint arXiv:1701.06538, 2017. [*]E. R. Sparks, A. Talwalkar, D. Haas, M. J. Franklin, M. I. Jordan, and T. Kraska. Automating model search for large scale machine learning. In Proceedings of the Sixth ACM Symposium on Cloud Computing, SoCC 2015, Kohala Coast, Hawaii, USA, August 27-29, 2015, pages 368–380, 2015. [*]M. Stonebraker and L. A. Rowe. The Design of POSTGRES. In SIGMOD, pages 340–355, 1986. [*]I. Sutskever, O. Vinyals, and Q. V. Le. Sequence to sequence learning with neural networks. In Advances in neural information processing systems, pages 3104–3112, 2014. [*]M. Turcanik and M. Javurek. Hash function generation by neural network. In 2016 New Trends in Signal Processing (NTSP), pages 1–5, Oct 2016. [*]J. Wang, W. Liu, S. Kumar, and S. F. Chang. Learning to hash for indexing big data;a survey. Proceedings of the IEEE, 104(1):34–57, Jan 2016. [*]J. Wang, H. T. Shen, J. Song, and J. Ji. Hashing for similarity search: A survey. CoRR, abs/1408.2927, 2014. [*]K. Weinberger, A. Dasgupta, J. Langford, A. Smola, and J. Attenberg. Feature hashing for large scale multitask learning. In Proceedings of the 26th Annual Internatio nal Conference on Machine Learning, ICML ’09, pages 1113–1120, New York, NY, USA, 2009. ACM. [*]Y. Wu, M. Schuster, Z. Chen, Q. V. Le, M. Norouzi, W. Macherey, M. Krikun, Y. Cao, Q. Gao, K. Macherey, et al. Google’s neural machine translation system: Bridging t he gap between human and machine translation. arXiv preprint arXiv:1609.08144, 2016. [*]J. Yu and M. Sarwat. Two Birds, One Stone: A Fast, Yet Lightweight, Indexing Scheme for Modern Database Systems. In VLDB, pages 385–396, 2016. [*]H. Zhang, D. G. Andersen, A. Pavlo, M. Kaminsky, L. Ma, and R. Shen. Reducing the storage overhead of main-memory OLTP databases with hybrid indexes. In Proceedings of the 2016 International Conference on Management of Data, SIGMOD Conference 2016, San Francisco, CA, USA, June 26 - July 01, 2016, pages 1567–1581, 2016.
  • [技术干货] 云存储和网盘有什么区别吗?
    1、什么是网盘? 网盘,又叫网络U盘、网络硬盘,是互联网公司的在线存储服务,给用户提供如文件的存储、访问、备份、共享等文件管理等功能。用户可以把网盘看成一个放在网络上的硬盘或U盘,不管你是在家中、单位或其它任何地方,只要你连接到互联网,你就可以管理、编辑网盘里的文件。不需要随身携带,更不怕丢失。 企业网盘,是基于云计算理念推出的企业数据网络存储和管理解决方案,利用互联网后台数据中心的海量计算和存储能力为企业提供数据汇总分发、存储备份和管理等服务。 实用意义来说:企业网盘是一个企业专用网盘系统,具有强大和简单易用的文档在线编辑预览、协同办公、文件共享、自动备份、历史资料归档等丰富功能。 前段时间个人网盘关闭风波闹的纷纷扬扬,很多企业用户都将目光转向了企业级网盘应用。在这方面做的比较好的,国外有老牌厂商box,国内有够快云库等一些新兴企业。 就中国国情来讲,企业网盘无疑是将来网盘厂商的不二选择。企业网盘是基于云计算理念推出的企业数据网络存储和管理解决方案,利用互联网后台数据中心的海量计算和存储能力为企业提供数据汇总分发、存储备份和管理等服务。 由于个人网盘中的内容都是用户自发上传,网盘运营商在内容监管方面乏力,网盘中违法违规的内容不可控,加之个人网盘在文件存储安全性、文件分发便捷性、办公协作易用性等方面无法与企业网盘相比,可以预见,将来会有更多的企业与组织在选择文件管理软件的时候偏向于企业级网盘。 但是我们还是要将网盘和云存储做一个比较。而从底层构架上以及应用上,两者的区别就非常明显。 2、从底层架构来看 云存储应用了包括分布式文件系统、用户管理与身份验证、虚拟化等诸多技术手段。 网盘的技术构架则相对简单,以用户管理为例,网络硬盘仅仅只是依靠数据库管理进行用户区分,而并没有实现单一账户下多权限的划分、多账户间协作等管控内容。 3、从应用角度来看 网盘的作用更多是存储数据,但是云存储的功能却要包含更多内容。目前来看,云存储服务提供商更愿意围绕服务打造出一个包含文件同步、工作协同、多应用汇聚的平台,而不仅仅是放个数据那么简单。 总结 所以两者最本质的区别是在于,网盘仅是针对一部分用户所提供的一种服务模式。但是云存储则是在更高的层面上建立一系列服务体系。可以说,网盘的功能仅是云存储的一部分。
  • [产品讨论] 对象存储友商对比
    对象存储产品节点服务华为主要优势服务商产品优势资源包示例价格按需计费价格网络实例带宽镜像磁盘产品安全服务品牌华为高可靠:通过多级可靠性架构,保障数据持久性高达99.999999999%(11个9),业务连续性高达99.99%。 高安全:OBS通过可信云认证,支持服务端加密、防盗链、VPC网络隔离、日志审计、细粒度权限控制,保障数据安全可信 高效率:OBS通过智能调度,并结合传输加速、大数据垂直优化,为用户提供高并发、大带宽、稳定低时延的数据访问体验。 高可用:OBS支持REST API,提供多种语言SDK,兼容主流的客户端工具,您可以随时随地通过网络上传、下载、管理您的数据存储包100G:117元/年 下行包50G:117元/年 合计:234元/年标准型单价:0.148/GB/月 低频访问型单价:0.08元/GB/月 归档型单价:0.033/GB/月 下行流量:0.55元/GB静态 全动态新一代V5 计算实例最大300Mwin2008 win2012 win2016普通IO 高IO 超高IO国内(华东、华北、华南、香港)(自建机房)30+城市节点1.一对一客户经理 2.7*24小时售后热线 3.售后400电话+在线客服 4.电话报障+工单保障+邮件报障 5.专业备案团队1.聚焦I层基础设施服务,为客户提供纯净的平台环境 2.支持5线全动态BGP,享受更稳定的网络 3.高规格带宽,最高支持300M 4.共享宽带服务1.中立性:上不碰应用 下不碰数据 2.VPC构建网络隔离,保障网络安全 3.安全类产品免费使用,全方位保障主机安全 4.权威机构安全认证(可信云、云安全联盟等) 5.T3+高安全机房 6.一直为政府和军工企业提供服务支持1.一对一客户经理 2.7*24小时售后团队(运维+客服) 3.专业的备案团队 4.全程电话报障,快速响应 5.客户经理全程跟踪1.华为是技术型公司,深厚技术能力积累 2.端到端产品能力 3.世界500强企业,纯民营企业阿里高可靠:多重冗余存储,跨域备份,保障数据持久性高达99.999999999%(11个9)。 强安全:支持密钥鉴权和访问控制,读写权限分离,服务端加密,防盗链,VPC网络隔离。 高可用:支持REST API、多版本SDK和数据迁移工具,图片、视频处理服务等增值服务满足数据需求。 低成本:提供按需付费和预付费的支持方式,支持冷热数据的独立计量计费,减低存储成本。存储包100G:117元/年 下行包50G:108元/年 合计:225元/年标准型单价:0.148/GB/月 低频访问型单价:0.08元/GB/月 归档型单价:0.033/GB/月 下行流量:闲时0.25元/GB 忙时:0.50元/GB经典 专有(主要)IO(主要) 非IO最大200Mwin2003 win2008 win2012 win2016高效 SSD国内、香港、海外等13个节点(合作机房)1.客户经理(很少主动联系客户) 2.7*24小时售后热线 3.售前400电话 4.工单报障 5.专业备案团队腾讯稳定持久:设备冗余存储,为用户数据提供异地容灾和资源隔离功能,为每一个对象实现高达 99.999999999% 的数据持久性 安全可靠:提供防盗链功能,屏蔽恶意来源的访问;支持数据 SSL 加密传输,控制读写权限。,抵御 DDoS 攻击、CC 攻击。 便捷接入:丰富的 SDK 接入工具。提供无缝迁移工具让您的业务快速上云。 服务集成: 支持与其他腾讯云产品联动,包括 CDN 加速、优图处理、音视频转码、文件预览等组件,提供「存储 + 处理」一体化解决方案。可作为大数据计算的数据池,为大数据分析与计算提供数据源。无资源包标准型单价:0.13/GB/月 低频访问型单价:0.1元/GB/月 下行流量:0.50元/GB以上数据均采自2018年3月25日之前,若有不足或缺陷,欢迎指正,欢迎讨论。
  • [技术干货] Mongodb副本集选举机制
    本帖最后由 昵称 于 2018-3-26 00:21 编辑Mongodb 副本集是一种典型的高可用部署模式,副本集是一组服务器,一般是一个主节点(Primary)用来处理客户端的读写请求,多个副本节点(Secondary)节点对主节点的数据进行备份,以防止主节点宕机导致的单点故障。一旦主节点宕机后,那么整个副本集会进行一次新的选举,选举出一个新的节点成为主服务器。这种副本集部署模式,在主节点挂掉后,仍然可以从副本节点进行读取数据。保证业务的可用性。 要想了解副本集的选举机制,首先要简单了解一下mongodb 副本集之间心跳检测。概括为以下几点: 心跳检测 一旦一个副本集创建成功,那么每一个节点之间都保持着通信,每2s会向整个副本集的其他节点发一次心跳通知,也就是一个 pings包。在任意一个节点的数据库内部,维护着整个副本集节点的状态信息,一旦某一个节点超过10s不能收到回应,就认为这个节点不能访问。另外,对于主节点而言,除了维护这个状态信息外,还要判断是否和大多数节点可以正常通信,如果不能,则要主动降级。 选举条件 前提条件,参与选举的节点必须大于等于 N/2 + 1 个节点,如果正常节点数已经小于一半,则整个副本集的节点都只能为只读状态,整个副本集将不能支持写入。也不能够进行选举。 [*]初始化副本集 [*]主节点断开连接,主要说的是网络问题导致的主备不通 [*]主节点发生宕机 选举的规则 a) Bully 算法。 Bully算法是一种协调者(主节点)竞选算法,主要思想是集群的每个成员都可以声明它是主节点并通知其他节点。别的节点可以选择接受这个声称或是拒绝并进入主节点竞争。被其他所有节点接受的节点才能成为主节点。 对于副本集来说,每一个副本节点根据自己维护的节点状态信息,如果判断出整个副本集没有了主节点,而且本身具备升主条件,则会引发一次投票选举。投票发起者向副本集成员发起Elect请求,成员在收到请求后经过会一系列检查,如果通过检查则为发起者投一票。一轮选举中每个成员最多投一票,用30秒“选举锁”避免为其他发起者重复投票,这导致了如果新选举的Primary挂掉,可能30秒内不会有新的Primary选举产生。 b) 大多数原则。 如果投票发起者获得超过半数的投票,则选举通过成为Primary节点,否则重新发起投票。这个半数是基于初始化时整个副本集节点的数量的一半,而不是当时可以正常连接的节点。 c) 一票否决权。 所有成员都可以投否决票,一个否决票会将得票数减少10000,所以一般可以认为只要有成员反对,则发起选举节点不能成为Primary。投否决票一般需要判断下面三个条件。 如果下面有任意一个条件满足,则会停止选举过程。原计划升主的节点将仍旧保持Secondary状态。 (1)副本集中是否有其他节点已经是primary了? (2)自己的数据是否比请求成为主节点的副本节点上的数据更新? (3)副本集中其他节点的数据是否比请求成为主节点的副本节点的数据更新? 影响选举的主要因素 a) 心跳检测。 副本集节点之间每2s会发一次心跳通知,一旦某一个节点超过10s不能收到回应,就认为这个节点不能访问。 b) 优先级。 优先级为0 的成员肯定不能成为主节点,但可以具备选举权。优先级最高的成员一般会被选举为主。 c) Optime。 optime自身是一个时间戳,某个节点的optime 为整个副本集中最新的,该节点最可能被选举为主。optime主要与同步机制有关系,详细的同步机制可以参考以下文档 mongodb副本及发生回滚(rollback)情景与规避措施 这里不再赘述。 d) 网络。 如果网络连接是可靠的,则整个副本之前的连接是正常的,那么大多数的连接是可以建立的。一般可以选举出新主,否则,整个副本集将不正常。 e) 网路分区。 如果主挂掉了,不同网络分区的成员分布比较平均,都不占大多数,选举不会被触发,所有成员状态变为只读,官方推荐副本集的成员数量为奇数,主要就是这方面的原因。假设四个节点被分成两个IDC,每个IDC各两台机器。这样就出现了个问题,如果两个IDC网络断掉,在上面选举中提到只要主节点和副本集中大部分节点断开连接就会开始一轮新的选举操作,不过mongodb副本集两边都只有两个节点,但是选举要求参与的节点数量必须大于一半,这样所有集群节点都没办法参与选举,只会处于只读状态。但是如果是奇数节点就不会出现这个问题,假设5个节点,只要其中一个IDC部署3个节点,那么这3个节点就可以选举出新主。
  • [下午茶时光] 【Day 40--2018/3/21】让计算看到数据:粉碎存储网络的瓶颈
    12967 【下午茶时光——业界热点陪你喝咖啡】 让计算看到数据:粉碎存储网络的瓶颈 所有计算都包括将计算和数据集中在一起、向DRAM中加载来自存储的数据,这样处理器就可以完成它的工作。这不是一种物理上的靠近;处理器距离数据是1厘米还是20厘米无关紧要。重要的是降低数据访问延迟,并提高数据读取或写入存储的速度。让计算靠近数据,这听起来像是一种绕过存储访问瓶颈的好方法,但由于软件问题以及开发特定硬件和非x86环境的需要,进展十分困难。随着数据量从TB级增长到PB级以上,将数据带到处理器所需的时间正在成为一个越来越棘手的难题。所有计算都包括将计算和数据集中在一起、向DRAM中加载来自存储的数据,这样处理器就可以完成它的工作。这不是一种物理上的靠近;处理器距离数据是1厘米还是20厘米无关紧要。重要的是降低数据访问延迟,并提高数据读取或写入存储的速度。 12968 存储和计算之间存在瓶颈,因为存储介质(主要是磁盘)的访问速度很慢。存储网络也很慢,处理存储IO堆栈需要太多周期。有过几次解决这个问题的尝试,其中一些失败了,另一些仍在开发中,特别是将计算添加到SSD。这些是: - 将计算带入存储阵列- 将存储带入计算- 内存系统- 将计算带入磁盘驱动器- 将计算带入闪存驱动器- 绕过NVMeoF的问题将计算带入存储阵列 Coho Data试图将计算添加到其存储阵列DataStreamMicroArray中,该阵列是Coho Data在2015年5月推出的,采用基于英特尔至强处理器的服务器/控制器、PCIe NVMe闪存卡和磁盘存储。然而,该产品未能取得进展,Coho Data在2017年8月停业。 Coho Data DataStream阵列12970 在这种方法下,计算针对所谓紧密耦合的存储任务,如视频流转码和Splunk式数据分析。它不是运行在主机服务器上执行的一般应用的。有两个明显的问题:首先必须自己编写软件或者购买软件以运行在阵列上,执行紧密耦合的存储任务。其次,用于启动的主机服务器代码、编排、管理和计算结果的处理必须自己编写或者购买。之前在服务器(有一个附加存储阵列)上运行的任务,现在必须细分为主机服务器部分和存储阵列部分,然后进行管理。这也适用于其他任何是计算到存储介质的产品。CohoData的这款阵列使用x86处理器。如果带入存储驱动器的计算系统不是x86的,那么在其上运行的代码将是在x86主流开发路径之外的。 据我们所知,目前没有任何其他尝试将计算带入存储阵列的显著方法。将存储带入计算,融合基础设施(HCI)设备将存储带入计算,使其不再需要外部共享存储阵列。超融合基础设施节点使用的是本地存储,多个节点的存储聚合为一个虚拟SAN。这仍然可以使用标准的存储IO堆栈(如iSCSI)访问,并且需要通过以太网链路等远程节点**问数据。因此,这种将计算和存储更紧密地结合在一起的方式并不会取消存储访问IO堆栈或对远程存储的联网访问。超融合基础设施的好处在于其他方面。内存系统,内存(DRAM)系统试图彻底取消运行时处理的存储。数据从存储加载到内存,然后在内存中使用,比数据存储在磁盘上的访问速度快得多。GridGain和Hazelcast就是厂商提供软件运行内存系统的两个例子。 GridGain堆栈12971 另外一个系统是SAPHANA数据库。磁盘上的源数据很少被访问,以加载内存系统,然后内存数据的更改被写入磁盘,同样频率很低。或者,对内存数据库的更改将写入保存在磁盘上的事务日志。数据库崩溃的话可以从日志中进行恢复。记录内存交易的的例子包括Redis、Aerospike和Tarantool等产品。内存系统仅限于使用DRAM,因此在实际尺寸上是有局限性的。将计算添加到磁盘驱动器的替代方案,旨在提供多TB的容量,而且比DRAM更便宜,提供与存储堆栈和存储网络访问全闪存阵列不同类型的性能提升。 将计算带入磁盘驱动器希捷的Kinetic技术或多或少地开始实现这一想法——将小型处理器**到磁盘驱动器,并向驱动器添加对象访问协议和存储方案。这么做一部分理由是简化存储访问堆栈处理。但是使用这些驱动器的上游应用进展缓慢,存在软件方面的难题,部分原因是磁盘驱动器仍然是磁盘驱动器,与闪存驱动器相比速度较慢。 OpenIO Arm-y磁盘驱动器,OpenIO已经将ARM CPU添加到磁盘驱动器,将其转变为用于对象存储的纳米节点。Ttttttttttt4从OpenIO到WDC磁盘驱动器,添加了ARM CPU系统它有一套Grid forApps方案,战略负责人Enrico Signoretti说:“硬盘纳米节点适合传统的对象存储用例(例如动态归档),但我们想要复制我们已经在纳米节点x86平台上所做的事情。”“感谢Grid forApps [无服务器计算框架],我们已经展示了图像识别和索引、模式检测、接受过程中的数据验证/数据准备、以及一般的数据处理和元数据丰富。借助CPU的动力,我们能够直接在磁盘层面迁移大部分操作,在元数据保存、访问或者更新的时候创造价值。”他提到了应用领域的一个例子,那就是视频监控:“远程摄像头可以有一个或多个纳米节点保存所有视频流,在本地进行操作(如人脸识别、去除无用部分等等),只将相关信息(包含元数据)发送到核心。所有数据都保存在本地,但只有相关信息被迁移到云端。“通过这种操作方式,你可以节省大量的网络带宽,同时从中央存储库中删除所有杂乱数据,从而加快操作,降低云中的存储成本。这是一个高级应用,同时也是具有变革意义的。”他说基于闪存的纳米节点看起来很有前景,因为如果速度更快的话,“目前纳米节点中的硬盘正在限制了应用的范围,因为缺乏IOPS。”“一旦闪存成为那些以容量驱动的应用的可行选项,我们准备利用我们的无服务器计算框架来运行更接近数据的应用。实时视频编码、人工智能/机器学习、物联网、实时数据分析都是我们密切关注的领域,我们将在接下来的几个月中分享更多信息。” 作者:至顶网 来源:今日头条
  • [技术干货] mongodb副本及发生回滚(rollback)情景与规避措施
    本帖最后由 lipo 于 2018-3-18 21:58 编辑[*]关于回滚: 官方文档的说明为:A rollback reverts write operations on a former primary when the member rejoins its replica set after a failover. 即rollback发生在主备故障切换后,会回滚掉前一个主节点的部分写入数据。这明显属于丢数据,对于某些应用场景,简直不可忍受。那么我们就需要了解这个过程怎么发生的,才能做出针对性的对应措施。 [*]mongodb发生回滚的过程分析 1. 下图为一个正常工作的副本集,绿色的为主节点,蓝色为备节点,数字代表我们依次写入的数据。 那么此时下图中,A为主节点,BC为备节点,我们成功写入数据至13,此时A已写入,BC正在同步数据,一切看起来很正常,很祥和。 在这里,我们还要着重简单说明一下主备同步的机制,简单的说,就是备节点会去主节点的Oplog(operation log)内去寻找自己最新的Oplog,找到后,就知道自己落后主节点多少operation,此时备节点会把自己落后的主节点的新的oplog拿过来,在自己这边重新执行一遍(别担心,每一条Oplog都具有幂等性),这样主节点的数据和状态就会更新过来了。 12646 2. 此时,如下图,意外发生了,由于一些不可知的原因,A与BC断开了网络链接,而BC之间通信正常,BC很快发现了这一点,于是我们mongodb强大的failover机制起作用了,A被踢出了主权限,BC将会商量选出新的主节点,我们假设将选出的主节点为B。 12647 3. 经过短暂的两三秒后,新的主节点B诞生了。整个过程我们客户端没有任何感知,继续高兴的执行我们写入计划,好的,继续写入数据14。14成功的被写入了,接下来是15,16,17...当然,这些新数据都会写到我们的新主节点B内。 12648 4. 非常幸运的,我们修复好了A节点的网络故障!A又回来了!此时A会发现,自己的最后的Oplog时间,也就是写入数据13的时间,落后与当前主节点B的Oplog最后时间,也就是数据17的写入时间。A决定要尽快新的主节点保持同步,赶上B节点的最新数据。于是,A用自己本地最新的数据去与新的主节点做比对,首先是数据13,它发现B内竟然没有数据13,哦,数据13肯定是脏数据,等会扔掉。然后是12,哎哟,12也是脏数据,接着是11...最后,它发现,它与主节点最近的相同数据就是数据10。谢天谢地,总算和老大找到共同点了。 12649 5. 在于老大(主节点B)找到共同点后,为了保持和主节点一直,节点A非常没有节操的扔掉了它认为的脏数据。扔完脏数据后,节点ABC达到如下的节点状态: 12650 6. 那么,A节点丢脏数据这个过程,也就是官方文档所说的rollback。 [*]RollBack规避措施: 了解了这个过程,我们就容易发现,想数据不发生回滚,那我们只要保证主备节点的数据随时一致就行了!这句话说起来简单,实现起来却无比头大。 不过万幸的是!mongodb提供了一个非常强大选项:Write Concern,当设置Write Concern为majority时,会在主节点写入后,保证备节点也同步了该数据,才返回写入成功,这样就再也不怕failover时发生数据回滚了! 至于Write Concern到底是个什么东西,还有既然有Write Concern,是不是还有Read Concern?这个就有待下回分解啦!
  • [新特性] 视频编码介绍(4)-编码与监控篇
    本帖最后由 leewei 于 2018-3-16 09:17 编辑分辨率 监控行业中主要使用以下分辨率:SQCIF、QCIF、CIF、4CIF。 SQCIF和QCIF的优点是存储量低,可以在窄带中使用,使用这种分辨率的产品价格低廉;缺点是图像质量往往很差、不被用户所接受。 CIF是监控行业的主流分辨率,它的优点是存储量较低,能在普通宽带网络中传输,价格也相对低廉,它的图像质量较好,被大部分用户所接受。缺点是图像质量不能满足高清晰的要求。 4CIF是标清分辨率,它的优点是图像清晰。缺点是存储量高,网络传输带宽要求很高,价格也较高。 分辨率新的选择-528x384。 2CIF(704x288)已被部分产品采用,用来解决CIF清晰度不够高和4CIF存储量高、价格高昂的缺点。但由于704x288只是水平分辨率的提升,图像质量提高不是特别明显。 经过测试,我们发现另外一种2CIF分辨率528x384,比704x288能更好解决CIF、4CIF的问题。特别是在512Kbps-1Mbps码率之间,能获得稳定的高质量图像,满足用户较高图像质量的要求。这一分辨率已被许多网络多媒体广播所采用,被广大用户所接受。比如杭州网通网上影院是采用512x384分辨率,在768k下能稳定地获得近似DVD的图像质量。 最佳方式 视频编码正处于一个技术日新月异的时期,视频编码的压缩性能在不断得到提升。 在监控中主要使用ASIC和DSP两种方案。由于ASIC芯片的设计、生产周期过长,使它已跟不上视频编码的发展速度。而DSP芯片,由于它的通用设计,使它能实现各种视频编码算法,并且可以及时更新视频编码器,紧跟视频编码的发展速度。另外使用DSP芯片可以比ASIC更灵活的配置编码器,使编码器达到最佳性能。 强大的H.264视频压缩引擎使产品获得极高的压缩比、高质量的图像质量和良好的网络传输性能。高性能的DSP处理器能灵活的配置视频编/解码器:动态设置分辨率、帧率、码率、图像质量等;可以双码流输出,达到本地存储和网络传输分别处理的功能。 使用TM130X DSP的产品,单个芯片能实时压缩一路以下分辨率的视频:SQCIF、QCIF、CIF、2CIF(PAL:704x288或528x384)。 使用DM642 DSP的产品,单个芯片能实时压缩4路以下分辨率的视频:单个芯片能实时压缩2路4CIF视频。 系列内容: 视频编码介绍(1)-基本概念篇 视频编码介绍(2)-框架篇 视频编码介绍(3)-技术篇 视频编码介绍(5)-相关技术和扩展篇