社区
应用实例
帖子详情
为什么我在查询分析器里执行时,没有时间限制,而在控制台里用同样的代码建一个试图或写在存储过程里都会超时呢·········
tanbi52
2003-09-11 08:35:24
如题
...全文
42
7
打赏
收藏
为什么我在查询分析器里执行时,没有时间限制,而在控制台里用同样的代码建一个试图或写在存储过程里都会超时呢·········
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tanbi52
2003-09-17
打赏
举报
回复
to tjan:
我也很想在视图上建索引,但老是提示:
不行啊,怎么老是提示 :"it contians one or more disallowed column"
请指点(不好意思,又麻烦你了,答完就给分)
tjan
2003-09-15
打赏
举报
回复
因为 group by 也会使用索引,索引按照 HTLH、JLR 顺序建,group by 会使用这个索引,where 子句也使用这个索引,如果索引反过来建,where 子句会使用这个索引,但 group by 不使用这个索引。
如果你的基表数据基本不变,你可以在视图上建索引。
tanbi52
2003-09-13
打赏
举报
回复
我也应该可以在试图上直接建索引吧,但每次建时,都会提示错误
还有,请问:为何条件里,jlr放在htlh前,速度会慢一些呢
romail
2003-09-12
打赏
举报
回复
是这样的,大概是因为查询分析器是用于调试程序用的,不考虑时间问题,而在控制台内的操作被认为是用户的操作,不能允许它长时间占用服务器吧
tjan
2003-09-12
打赏
举报
回复
把代码帖出来看看
tjan
2003-09-12
打赏
举报
回复
在视图 inputbom_ht02 的基表的 HTLH、JLR 列上创建一个复合索引,并把你的 where 子句修改为下面的样子:
WHERE HTLH>=@STHTLH and HTLH<=@EDHTLH
and JLR>=@QCDATE and JLR<=@EDDATE
tanbi52
2003-09-12
打赏
举报
回复
就是先对一个有着好几万条记录的试图先按合同料号进行江总一个数值型字段,它就会超时:
INSERT INTO #lpbhtlbjybjtempdata_0 (HTLH,HTJY)
SELECT HTLH, SUM(HTYL)
FROM INPUTBOM_HT02
WHERE JLR>=@QCDATE and JLR<=@EDDATE
and HTLH>=@STHTLH and HTLH<=@EDHTLH
GROUP BY HTLH
说明:inputbom_ht02为有着几万笔记录的试图
区块链实战高并发项目
为什么区块链必须是高并发的? 1. 摩尔定律早已结束目前,提高并发性是解决人类计算能力的主要方向了。但是并发的编程模型一直受到来自上下两方的压力。2000年开始之际,人们已经意识到摩尔定律失效了。你不太可能期待着今年
写
的C
代码
在明年的
时
候能够被更快的处理器运行了。因为处理器性能的提升主要是通过堆积更多的core来完成。所以为了编
写
更快的
代码
,你要做的是编
写
并发式的程序,同
时
使用更多的核、更多的CPU、更多的机器。对于并发式的编程模型这就是来自于下方的压力。当今的主流商业应用软件都是跑在web端的,7乘24小
时
百万级以上的并发访问。人们已经无法想象
一个
运行在桌面的单机程序实现
同样
的商业价值。对于编程模型来说,这是来自于上方的压力。所以当我们谈论区块链
时
,我们需要明白支持并发性才能满足市场的需求。2. 线程模型并不理想线程模型是上世纪90年代提出的并发模型,线程模型广泛应用在Java虚拟机、CLR、.net虚拟机中,甚至应用于Erlang这样更高级的系统。线程模型失败的地方在于如果你在读一段Java或C sharp
代码
,你无法明白有多少个线程在
里
面。我们可以讨论并行性和并发性,也可以讨论并发式和分步式,前提是我们必须搞清这几个概念。并行性指同步进行的多项活动之间并不共享信息。就像一条八车道的公路,根本
没有
换道,那就是并行。当你开始允许换道
时
,不同的活动和线程之间出现交互,那就是并发。分布式就是把每一笔交易想像成一辆车,换道就是切换到不同的处理器上。分布式必然需要面对故障模式,如果允许单独某个任务失败,就带来了本地(local)的概念。线程有不同的概念,包括有操作系统线程和cpu内核的物理线程等等。我谈论的是虚拟机上提供并发性的编程模型。线程模型的问题是本质上在编程语言的语义层面并
没有
提供并发性的支持。我用语言集成
查询
作为
一个
例子,证明语言集成将最终胜出。语言集成
查询
开始于微软的函数式编程大牛Eric Meyer。数据存储的两个方法是:1,提供
一个
支持数据存储的库;2,提供
一个
查询
的语言特性。在第一种情况下,并
没有
类型系统(type system)帮助你对
查询
进行语义检查。在后一种情况下,类型系统和编译器参与检查确保
查询
处于良好状态并且不
会
中断。在过去的十五年中,语言集成
查询
已经是最热门的话题之一。所以
时
间
将
会
证明,语言整合的方法
会
稳步胜出。回到并发的话题,采用库的方法就是线程模式的思路。在语义层面的扩展就是Rholang、 Pict 或者Vim等移动进程演算(mobile process calculi )的思路。type system保证了你在读一段Rholang程序
时
,能够看到有多少个进程在进行。
同样
的,如果你采用 pi calculus 或者 ambient calculus也可以具有
同样
的优势。3. DAO事件其实是
一个
并发问题并发性成为一种语法现象。因为它是语法,是可以对
代码
进行分析并检查各种并发属性的语法。
一个
非常好的示例是竞争条件(race condition):两个事件是否有可能以任意顺序发生?DAO事件其实是
一个
并发问题,是竞争条件。如果有对应的语言表示,就可以通过语法分析(也称为静态分析),捕获这些错误。即使是熟悉并发问题的老程序员,仍然
会
不
时
地搞错,例如用餐哲学家(dining philosophers)或其他类型的问题,所在为并发编
写
算法是非常困难的。当我在八十年代末和九十年代初期在Rosette工作
时
,我注意到即使使用非常强大的编程语言,并发编程也是非常困难的事情。不幸的是编程理论停止了二三十年,市场好像卡住了。我惊诧于Javascript一直统治着浏览器平台。我计划开发
一个
基于Rholang的浏览器语言,使用Rholang从头编
写
浏览器。4.现在的区块链都错了大多数交易是孤立不相关的。大多数人的财务状况都是彼此分开的。当你去喝咖啡
时
,地球另一面的人在买菜,你们的交易不相关,在区块链世界中,这一点非常重要。如果我们必须对这些交易进行系列化,我们就走进了死胡同。所有的交易都必须经过
一个
虚拟机。如果那个虚拟机是顺序的(sequential),Transaction将不得不按线性排列,这正是以太坊虚拟机的模式。在这种情况下,无论是DAG还是区块,那都无所谓了。在区块链上使用序列化模型
时
,不可能有语言层面的并发的显式表示。因此无法使用静态分析来获得并发行为,并发都隐藏在幕后。这就像
一个
干净和纯粹的函数式语言和Java之间的区别。使用与lambda演算接近的函数式语言,你所看到的就是你所获得的。所有
执行
实际上都在
代码
中。而对于Java来说,程序中存在着一堆隐藏的状态:堆栈、线程数以及类似的东西都在
代码
中。
ThinkPHP5有/无路由两种状态底层
代码
执行
流程源码分析
将从入口文件index.php的第一行
代码
开始一直讲解到整个流程的后一条
代码
,分别阐述了ThinkPHP5在无路由和有路由两种状态的整个
代码
执行
流程有兴趣的可以加ThinkPHP二次开发和源码讨论的QQ群:4552668
区块链之实战VM虚拟机开发
智能合约虚拟机赋予了区块链运行去中心化应用(Dapp)的能力。它让区块链演化为“操作系统”,孕育出繁荣的Dapp生态。一款优秀的VM不仅仅是要完成确定、高效、安全地
执行
合约字节码的功能,它应该足够通用,能最大化节省开发者的成本,甚至能形成独立的开发者生态。从架构上来说,VM为智能合约提供计算资源和运行容器,区块链的共识、
执行
模块与VM是完全解耦的。在区块链2.0项目中,我们看到大部分项目将VM作为区块链项目的
一个
子模块,一同编译进二进制中;Fabric更进一步,链码被编译成独立的程序,运行于独立的docker容器中,通过grpc与节点交互。如此,可将数据与逻辑彻底分离;在未来,VM可能以硬件的形式安装在“矿机”中,通过更底层的如PCIe接口与区块链进行通信。业界的Nervos CKB使用RISC-V实现VM,为演化成硬件模块做准备。架构设计验证层验证层
会
对合约字节码及传参进行一些验证,包含ABI验证,环境检查与版本检查三个环节。ABI验证:利用合约ABI对用户发送的合约调用及参数进行校验。环境检查:检查虚拟机
执行
环境是否符合预期检查Config字段。字节码是否合法。exports是否包含apply与memory,以及类型是否正确;是否包含start(被禁用);是否包含import,import的模块是否合法。解释器模块是否ready。版本检查:检查合约版本,选择对应版本的解释器。注入层注入层主要对合约字节码注入一些必要的
代码
,以及构
建
相应的
执行
上下文。Gas MeteringGas metering是用于统计每
一个
操作所须花费的Gas。原理非常简单:实现Env_api方法useGas。将wasm字节码恢复成易于解析的格式化文本(如JSON)。将useGas注入到格式化文本中将格式化文本重新恢复成wasm字节码。这
里
有
一个
值得考虑的问题:**Gas Metering能否放到编译期去做?**在编译器做Gas metering注入的好处是只须要注入一次,节省了
执行
时
的开销。但这样的弊端也很明显:Gas Table本属于区块链协议的一部分,但却被放到合约编译器中,恶意用户只须要更改编译器的Gas Table即可完成作恶,作恶成本大大降低。若Gas Table需要修改,无法再对已部署的旧合约更新Gas Metering,导致新老合约的Gas收费标准不一致。在每次
执行
时
进行一次Gas Metering注入,虽然牺牲了一些
执行
效率,但换来了Gas灵活变更的特性,这对于不断调整、迭代的公链项目是至关重要的。一种更好的方案,是将Gas Table以合约形式部署,无须硬分叉便可更改Gas Table的参数。Env API 注入Env_api是区块链提供给合约层用于与区块链进行交互的接口。注入原理如下:合约字节码(wast)中包含形如(import env getAddress (func ...))的
代码
段。意为从env模块中导入getAddress函数。env模块从哪来呢?由虚拟机利用解释器的API构
建
原生模块,并实现预先设计的Env_api。这
里
的Env_api都须要用原生语言实现。利用解释器的moduleResolver在
执行
代码
前注入。经以太坊基金
会
Go-team的gary推荐,这
里
隆重介绍下EVMC这个项目。它提供了一套虚拟机和客户端之间的通用交互接口。不同的VM只需要实现这些接口,即可为以太坊客户端提供交互功能。如此将客户端与虚拟机实现相互分离,更能够根据实际情况灵活切换底层虚拟机实现。上下文构
建
我们还需要给合约
执行
构
建
合理的上下文环境,提供必要的内部模块和数据以供合约使用,包括:区块链账本实例,提供区块、交易等信息的调用接口。状态数据库实例,提供状态数据的增删改查的调用接口。当前Transaction与Action的相关数据。当前区块高度和区块
时
间
。
执行
层
执行
层是虚拟机的核心模块,负责
执行
合约字节码并返回结果。它必须具备以下几个特性:确定性:即相同入参和上下文,无论在什么设备上运行,何
时
运行,运行几次,都必须获得相同结果。高效
执行
:虚拟机的
执行
时
间
不大于共识算法给于交易
执行
的最大
时
间
。停机与回滚:须要有相应停机机制。在
执行
失败
时
须要对本次
执行
涉及的所有状态变更进行回滚。沙箱环境:即保证合约与合约之间、合约与宿主系统之间的资源隔离。能够防备恶意和故障合约的不良影响。Apply
执行
合约字节码,实际是调用合约
代码
中的apply函数。合约上下文,包括用户指定调用的合约方法名和对应入参,通过Env_api在实际apply实现中获取,最终调用相应的合约方法。栗子详见系列第二篇。Memory合约除了应导出apply函数外,还须要导出memory对象。memory对象是wasm编译器在合约编译
时
自动注入,通常
会
开辟一页内存(64KB) (memory $0 1)。解释器
会
初始化
一个
线性字节数组作为内存供wasm使用,wasm与区块链数据交互是依靠内存共享的形式,通过该字节数组进行传递。(这也是为何在Env_api设计
里
,很多数值的传参是offset与length的组合)Wasm的内存数组是按照| static memory | dynamic memory |的次序划分,static memory中存放编译期的字符串或数组,dynamic memory用于运行期的数据存储,并且可以动态扩容。为了防止dynamic memory无
限制
地扩容,需要有合理的收费机制与内存分配上限。AssemblyScript提供了
一个
额外的位于static memory之前的预留空间,称为reserved memory。这使得我们在运行期可以将一些变长数据(如字符串,数组等)以Global的形式导入wasm。这样wasm无须调用Env_api即可直接使用上下文的变量,如发送方、接收方、合约地址、当前调用的合约方法名等。状态存储对VM最本质的需求是对状态存储的需求,这种存储是达成共识的、不可逆的,从而实现了去中心化应用中数据的信任存储。Ethereum1出现的状态爆炸问题给我们敲响了警钟——只收取每一次读
写
操作的费用,而不收取占用存储的费用,是不合理的。如果不对占用存储收费,则用户可以无
限制
地占用区块链的稀缺存储资源;且由于
没有
好的数据清理机制,区块链的状态就
会
不断增长,即所谓“爆炸”。状态存储付费是很自然想到的方案。如何设计合理的状态存储付费方案,有两个底层逻辑需要考虑:用户应当为占用链上的稀缺存储资源付出成本。这
里
的成本是广义的,可以是代币价值、机
会
成本与承担额外风险等形式。状态存储的使用属性最大化,投资属性最小化。须要避免出现用户大量囤积存储资源,提高资源利用率。EOS使用【RAM】来解决状态收费的问题。开发者须要使用代币向系统合约购买RAM,存储状态数据须要消耗对应大小的RAM资源,当数据删除
时
RAM资源也
会
相应释放,并且可以卖回给系统拿回代币。但开发者须要承担RAM和代币价值波动风险。如何对RAM定价呢?EOS创新性地引入了Bancor算法对RAM进行模拟市场定价。Bancor算法有两个特点:数字货币价格取决于存储金金额和代币流通量,真实模拟了市场供需关系;人机交易,无须对手盘,这使得“巨鲸”可轻易做多或做空,导致价格波动剧烈。也正因为上面两个特性,EOS主网刚上线
时
,出现了大量RAM资源被囤积,RAM价格被瞬间拉至高位,又在随后的一周内快速下降,造成了“割开发者韭菜”的情况。V神在2018年曾提出过使用【状态租金】来解决状态爆炸问题。状态租金很像当前云计算服务的商业模式,用户不仅花费购买占用空间大小,还须购买占用
时
间
。对于状态租金方案的具体设计,我们仍然须要考虑以下几个问题:用户体验:当状态出租
时
间
快到期
时
,如何提醒用户续费?
时
间
到期后状态数据是否立马清除?不同级别的数据是否有区别的对待?(云服务厂商都
会
提供到期后的赎回期,以防止关键数据被意外删除)支付对象:哪些数据需要支付租金?除了合约的状态数据必然要支付租金以外,账户本身的元数据(balance, nonce等)是否也要付租金?如果需要,
时
间
到期后清零,势必损害用户的资金安全(与区块链保护数字资产的理念相背),同
时
nonce为0后可能
会
遭受重放攻击。如果不需要,仍然无法抑制因新账户的创
建
而产生的状态爆炸问题。定价:链上存储资源的稀缺程度,与区块链的生态价值及当下的市场需求密切相关。如何
建
立
一个
合理定价模型便是个非常重要的问题。Ethereum Research中有大神对状态租金的方案进行了细化,引入了激励机制用于租赁过期的发现和确认,并且允许在状态数据删除后申请恢复。Nervos CKB结合了状态买卖和状态租金的长处,利用原生代币代表占用全局状态的权利,且汇率恒定,即1 CKB代表1 Bytes的存储空间。同
时
巧妙地利用【二级发行】机制为代币持有者(存储空间占有者)设置了【通胀税】,以作为支付给矿工的状态租金。靠通胀收取租金的方式既保留了RAM方案的买断存储空间的使用模式,解决了上面所提到的用户体验的问题,又将定价转移到了通胀部分对应的法币价值,完全由二级市场进行价值发现。但这使得状态空间的上限严格等同于当前代币流通量,在初期可能
会
限制
生态的发展。合约安全我们在第一篇中有提到,合约安全分为编译期安全和
执行
期安全。本篇主要阐述
执行
期安全的设计思路。
执行
期安全也成为运行期安全,主要由VM针对以下两方面提供保障:数据安全:不能随意篡改其他用户或其他合约的状态数据。资源安全:CPU、内存、硬盘资源的分配与回收。数据安全加密数字资产真正实现了人类梦寐以求的“私有财产神圣不可侵犯”,它象征着真正的自由。为了捍卫这份“自由”,数据安全是重中之重。VM需要为以下两个方面提供安全保障:用户数据的安全,即利用密码学算法判断是否有修改状态数据的权限。合约状态数据的隔离,即任何合约都不能直接修改其他合约的状态数据,即使该用户拥有权限。第
一个
维度很好理解,合约
会
提供根据用户地址和交易签名进行身份权限审查的功能(甚至可提供基于多密钥对的权限管理),以判断本次合约调用是否有权限修改相应的数据。这也是“私有财产神圣不可侵犯”的根源。第二个维度需要特别解释一下。这
里
的不能直接修改其他合约的状态数据,是指不能在合约A的方法中直接修改合约B的数据。为什么?因为这
会
导致状态变更无法追溯,带来不确定性。我们知道,区块链环境中只能通过交易(Transaction)来触发状态变更,交易本身就是状态变更的日志。若允许在合约A中直接修改合约B的状态数据,则这次修改是并未生成相关日志的,使得状态修改无法追溯,与区块链“可追溯”的特性相违背。以太坊中跨合约调用也是
没有
保留日志的。笔者认为这是因为以太坊合约是不可升级的,一旦部署后地址和
代码
都是不可变更的,因此可结合交易和
代码
具体片段来追踪状态变更记录。但以太坊并
没有
提供相关的索引,这导致对状态修改的记录追踪基本不可能,因此我认为这是
一个
设计上的重大缺陷。在EOS中,我们看到跨合约调用是生成了新的action,并被加入到原action列表中,在链上保留了状态修改的日志。能否利用静态
代码
分析的方式确定跨合约的对方地址和相关合约方法,从而追溯到状态变更的细节?当然是可行的,但如果有多层调用(合约A -> 合约B -> ... -> 合约Z),这种方案显然开销是非常大的。尽管以太坊提供了tracer,可以在
执行
交易的过程中追踪跨合约调用的对象,但如果我想查找导致合约X某状态变更的所有历史操作,上述方案必须遍历并模拟
执行
所有的历史交易,显然是不可取的。我们认为,跨合约交易正确的做法,是通过内联交易的形式调用合约B的方法从而间接修改合约B数据。即生成
一个
新的交易来触发目标合约的状态变更。该交易也
会
应放入区块中,视为由原交易生成的日志。这样可为状态变更保留操作记录,也符合“可追溯”的特征。资源安全智能合约通常运行在由虚拟机提供的沙箱环境,我们需要对其能够使用的资源进行适度的把控。这些资源包括三类:CPU、内存、硬盘。下面我们以QA的形式对涉及到的问题进行解答——CPU资源Q1: 合约运行最大能占用多少个进程,多少个线程?
一个
;
一个
或多个。Q2: 是否允许合约内开辟新线程?不允许。合约不应有操作系统级别的调用,而应由虚拟机层来确定性地分配CPU资源(线程数)。Q3:多线程下如何保证线程安全?多线程下,不应通过加锁来保证线程安全,原因是加锁无法保证
执行
顺序,带来不确定性。正确的做法是在
执行
前通过静态分析、注解等手段对合约调用进行归类。互斥资源的调用顺序遵循交易发送的顺序;非互斥资源的合约调用可以并行
执行
。Q4: 如何控制
执行
时
间
?利用Gas机制控制合约
执行
时
间
(在本系列第一篇已提到),避免过度占用CPU
时
间
。Q5: 如何捕捉错误与处理?合约
执行
的错误不应导致虚拟机的进程终止,虚拟机应当提供错误捕获和处理的机制。常规的做法
时
合约运行
时
的错误以error的形式抛出,虚拟机层捕获后做失败处理,包括终止交易
执行
、状态回滚、资源回收等。内存资源Q1:合约运行最大能占用多少内存?节点能分配多大的内存给虚拟机,是由矿工决定。这本质上经济学问题:扩大内存分配无疑
会
增加成本,而这部分提升的
执行
效率能为矿工带来多少收益。若可用内存过少,部分交易
执行
失败,可能导致分叉;若可用内存过多,又
会
造成资源浪费,降低矿工收益。Q2: 内存能否动态扩张?可以,但须要付费。为了防止内存无
限制
扩张,虚拟机还应对合约的内存占用设置上限。Q3: 如何避免内存泄漏?不应交由合约开发者控制内存回收,虚拟机应当实现GC机制。Q4: 如何避免内存溢出?Wasm虚拟机中内存实则为字节数组,本身带有边界控制,能有效防止内存溢出。磁盘资源Q1: 单个合约最多能够存储多少数据?这也是经济学问题,应该设置合理的硬盘占用计费。Q2: 能否修改其他合约的持久化数据?不能直接修改,因为这
会
影响到【数据安全】章节中提到的确定性。虚拟机为合约创
建
的上下文环境中,包含相互隔离的数据空间。可以通过创
建
新的上下文环境进行数据修改,这样的操作视为一次新的合约调用(保留日志)。Q3: 如何防止未知的数据丢失(如磁盘损毁)?当发生数据丢失
时
,节点
执行
合约
会
得到不同的状态结果,导致区块被认定为非法,区块链无法延长。这
里
需要区块链系统具备状态一致性的检测机制,在解决硬盘故障后采用同步主链块并重放交易的方式进行恢复。系统合约系统合约是指区块链系统在启动
时
预先部署的,可升级、可治理的合约,提供如权限控制、资源租赁、代币质押等基础服务。系统合约通常有以下三个特点:公开透明,无暗箱操作。可通过Env_api被用户合约调用。合约通过治理进行
代码
变更,无须硬分叉。系统合约可采用普通合约的实现方式,并在系统预定的合约地址部署。未来优化方向智能合约的并行
执行
合约并行
执行
是提升智能合约
执行
效率的一大思路。这
里
的并行
执行
并不是指单个合约方法内部的并行,而是合约间的并行。实现合约并行
执行
,我们需要考虑两个重要的问题:如何检测本次合约
执行
所访问的资源对象?如读
写
状态数据、读取账户余额等互斥操作。如何做合约
执行
的合理调度?即哪些合约能够并行
执行
,哪些必须串行?一种容易想到的思路是这样的:通过静态
代码
分析检测出合约方法可能访问到的资源,对
会
访问相同资源的合约调用归为同
一个
组。每个组的
执行
可以并行化,组内
执行
则串行化(根据交易发送顺序)。然而,实际设计
时
需要考虑的因素就复杂很多:如何设计
一个
完备的算法,准确地检测合约方法可能访问到的资源(包括跨合约调用中的资源访问)?如何设计
一个
高效的调度算法,将合约调用准确分组?合约并行
执行
后所带来的性能提升,是否能够追回以上两个算法所带来的开销?预言机预言机是智能合约获取链外数据的桥梁。这些数据通常由第三方可信数据源提供,如天气数据、赛事数据、数字货币价格等。在传统的互联网应用中,我们可以简单地通过HTTP API获取到这些数据。但在智能合约却不行,原因是HTTP调用通常是异步的,
时
间
不可预估且不具备确定性。因此,需要
一个
专门的基础设施来为智能合约提供这些链外数据。预言机的设计原则中需要考虑三个要点:获取链外数据并保证数据的真实可用。以确定性、同步的方式被智能合约调用获取。预言机网络本身的安全性和可用性。隐私保护密码学的研究推动了隐私领域的创新。隐私研究主要涉及零知识、多方计算、全同态加密等领域。多方计算 MPC 允许一组人基于他们的输入进行联合计算,而不需要每个人显示其输入值。 例如,Alice 和 Bob 想要知道谁拥有的比特币更多,那么在不需要他们披露自己拥有多少比特币的情况下就能达到这个目的。遗憾的是,目前多方计算的局限性在于它在实践中使用效率极低。全同态加密 (Fully homomorphic encryption) 则允许人们在加密的数据上计算。几十年来,这一直是密码学领域中的
一个
未解决的问题,直到 2009 年,斯坦福大学博士生克雷格·詹特利 Craig Gentry 使用「理想格」构
建
了第
一个
全同态加密方案。如果 Bob 想在 Alice 的数据上
执行
任意计算,比如训练机器学习模型,同
时
不必要求 Alice 显示明文数据,理想格加密方案就能派上用场。全同态加密和多方计算一样,目前仍然基本上停留在理论阶段,在实践中的使用效率太低。
基于Flink+Doris构
建
亿级全端电商实
时
数据分析平台
上层应用业务对实
时
数据的需求,主要包含两部分内容:1、 整体数据的实
时
分析。2、 AB实验效果的实
时
监控。这几部分数据需求,都需要进行的下钻分析支持,我们希望能够
建
立统一的实
时
OLAP数据仓库,并提供一套安全、可靠的、灵活的实
时
数据服务。目前每日新增的曝光日志达到几亿条记录,再细拆到AB实验更细维度
时
,数据量则多达上百亿记录,多维数据组合下的聚合
查询
要求秒级响应
时
间
,这样的数据量也给团队带来了不小的挑战。OLAP层的技术选型,需要满足以下几点:1:数据延迟在分钟级,
查询
响应
时
间
在秒级2:标准SQL交互引擎,降低使用成本3:支持join操作,方便维度增加属性信息4:流量数据可以近似去重,但订单行要精准去重5:高吞吐,每分钟数据量在千W级记录,每天数百亿条新增记录6:前端业务较多,
查询
并发度不能太低通过对比开源的几款实
时
OLAP引擎,可以发现Doris和ClickHouse能够满足上面的需求,但是ClickHouse的并发度太低是个潜在的风险,而且ClickHouse的数据导入
没有
事务支持,无法实现exactly once语义,对标准SQL的支持也是有限的。所以针对以上需求Doris完全能解决我们的问题,DorisDB是
一个
性能非常高的分布式、面向交互式
查询
的分布式数据库,非常的强大,随着互联网发展,数据量
会
越来越大,实
时
查询
需求也
会
要求越来越高,DorisDB人才需求也
会
越来越大,越早掌握DorisDB,以后就
会
有更大的机遇。本课程基于真实热门的互联网电商业务场景为案例讲解,具体分析指标包含:AB版本分析,下砖分析,营销分析,订单分析,终端分析等,能承载海量数据的实
时
分析,数据分析涵盖全端(PC、移动、小程序)应用。整个课程,
会
带大家实践
一个
完整系统,大家可以根据自己的公司业务修改,既可以用到项目中去,价值是非常高的。本课程包含的技术:开发工具为:IDEA、WebStormFlink1.9.0DorisDBHadoop2.7.5Hbase2.2.6Kafka2.1.0Hive2.2.0HDFS、MapReduceFlume、ZookeeperBinlog、Canal、MySQLSpringBoot2.0.8.RELEASESpringCloud Finchley.SR2Vue.js、Nodejs、Highcharts、ElementUILinux Shell编程等课程亮点:1.与企业接轨、真实工业界产品2.DorisDB高性能分布式数据库3.大数据热门技术Flink4.支持ABtest版本实
时
监控分析5.支持下砖分析6.数据分析涵盖全端(PC、移动、小程序)应用7.主流微服务后端系统8.天级别与小
时
级别多
时
间
方位分析9.数据库实
时
同步解决方案10.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS+ElementUI11.集成SpringCloud实现统一整合方案12.互联网大数据企业热门技术栈13.支持海量数据的实
时
分析14.支持全端实
时
数据分析15.全程
代码
实操,提供全部
代码
和资料16.提供答疑和提供企业技术方案咨询企业一线架构师讲授,
代码
在老师的指导下企业可以复用,提供企业解决方案。 版权归作者所有,盗版将进行法律维权。
从编程小白到量化宗师之路---基于BackTrader开发一套WorkForward前向分析框架
《从编程小白到量化宗师之路》系列课程是一套综合性实战课程,涵盖股票,期货,虚拟货币等的交易方法和策略手段。《基于BackTrader开发一套WorkForward前向分析框架》是本系列的第二个中级课程。课程宗旨是缩短个人或小型投资者与大型机构投资者之间的的差距。目前市场上的所有量化策略编
写
系统,都是从获取一段
时
间
的数据开始,利用指标或者各种模型,进行订单的买卖操作,直到跑完这段
时
间
的数据,运行出结果,并给出各种各样的统计分析,就结束了!?然而实际上,这远
没有
结束,我们就以指标为例,不同
时
间
不同的行情,指标的效果有很大的差别,更别说不同的年份有不同的行情,只使用一段
时
间
测试怎么足够?一次性用所有数据,又是一种极端过拟合,更何况,你不能使用2019年测试好的策略,用在2018年之前的任何
时
间
,这些
限制
,正是金融
时
间
序列数据的不同之处。为了解决这个问题,就应该使用WorkForward前向分析,也就是通常意义上的“边走边看,走一步看一步”。这本应该是最基础的功能,然而市面上大多数的量化分析系统,完全
没有
提到或者提供这项功能,让初步入门的量化学习者还要自己组装这一基础功能。本课程基于backtrader,实现了
一个
默认支持workforward分析的框架,用户只需要设定需要的产品数据,比如股票和期货,然后设定训练
时
间
,测试
时
间
,预热
时
间
(课程
会
讲到),编
写
策略后, 就可以运行WorkForward前向分析功能。用户以后只需要专注于策略编
写
,大大减轻了使用量化交易系统的负担。课程内容从讲解机器学习中用到的交叉验证和为什么金融
时
序要使用前向分析(WorkForward)开始,详细讲解了前向分析框架的每
一个
函数,每
一个
参数的用途,并使用边实际运行
代码
边讲解的方法,通透的讲述了前向分析框架使用到的各个部分,为同学们透彻理解前向分析框架的
代码
提供了十分方便的途径。
应用实例
27,580
社区成员
68,556
社区内容
发帖
与我相关
我的任务
应用实例
MS-SQL Server 应用实例
复制链接
扫一扫
分享
社区描述
MS-SQL Server 应用实例
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章