DolphinDB提供了功能强大的内存计算引擎,内置时间序列函数,分布式计算以及流数据处理引擎,在众多场景下均可高效的计算K线。本教程将介绍DolphinDB如何通过批量处理和流式处理计算K线。
其中可以指定K线窗口的起始时间;一天中可以存在多个交易时段,包括隔夜时段;K线窗口可重叠;使用交易量作为划分K线窗口的维度。需要读取的数据量特别大并且需要将结果写入数据库时,可使用DolphinDB内置的Map-Reduce函数并行计算。
使用API实时接收市场数据,并使用DolphinDB内置的流数据时序计算引擎(TimeSeriesAggregator)进行实时计算得到K线数据。
1. 历史数据K线计算
使用历史数据计算K线,可使用DolphinDB的内置函数bar ,dailyAlignedBar ,或wj 。
1.1 不指定K线窗口的起始时刻,根据数据自动生成K线结果
bar(X,Y)返回X减去X除以Y的余数,一般用于将数据分组。
date = 09:32m 09:33m 09:45m 09:49m 09:56m 09:56m;
bar(date, 5);
返回以下结果:
[09:30m,09:30m,09:45m,09:45m,09:55m,09:55m]
例子1: 使用以下数据模拟美国股票市场:
n = 1000000
date = take(2019.11.07 2019.11.08, n)
time = (09:30:00.000 + rand(int(6.5*60*60*1000), n)).sort!()
timestamp = concatDateTime(date, time)
price = 100+cumsum(rand(0.02, n)-0.01)
volume = rand(1000, n)
symbol = rand(`AAPL`FB`AMZN`MSFT, n)
trade = table(symbol, date, time, timestamp, price, volume).sortBy!(`symbol`timestamp)
undef(`date`time`timestamp`price`volume`symbol)
计算5分钟K线:
barMinutes = 5
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, date, bar(time, barMinutes*60*1000) as barStart
请注意,以上数据中,time列的精度为毫秒。若time列精度不是毫秒,则应当将 barMinutes60 1000 中的数字做相应调整。
1.2 需要指定K线窗口的起始时刻
需要指定K线窗口的起始时刻,可使用dailyAlignedBar
函数。该函数可处理每日多个交易时段,亦可处理隔夜时段。
请注意,使用dailyAlignedBar
函数时,时间列必须含有日期信息,包括 DATETIME, TIMESTAMP 或 NANOTIMESTAMP 这三种类型的数据。指定每个交易时段窗口起始时刻的参数 timeOffset 必须使用相应的去除日期信息之后的 SECOND,TIME 或 NANOTIME 类型的数据。
例子2 (每日一个交易时段):计算美国股票市场7分钟K线。数据沿用例子1中的trade表。
barMinutes = 7
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, dailyAlignedBar(timestamp, 09:30:00.000, barMinutes*60*1000) as barStart
例子3 (每日两个交易时段):中国股票市场每日有两个交易时段,上午时段为9:30至11:30,下午时段为13:00至15:00。
使用以下数据模拟:
n = 1000000
date = take(2019.11.07 2019.11.08, n)
time = (09:30:00.000 + rand(2*60*60*1000, n/2)).sort!() join (13:00:00.000 + rand(2*60*60*1000, n/2)).sort!()
timestamp = concatDateTime(date, time)
price = 100+cumsum(rand(0.02, n)-0.01)
volume = rand(1000, n)
symbol = rand(`600519`000001`600000`601766, n)
trade = table(symbol, timestamp, price, volume).sortBy!(`symbol`timestamp)
undef(`date`time`timestamp`price`volume`symbol)
计算7分钟K线:
barMinutes = 7
sessionsStart=09:30:00.000 13:00:00.000
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, dailyAlignedBar(timestamp, sessionsStart, barMinutes*60*1000) as barStart
例子4 (每日两个交易时段,包含隔夜时段):某些期货每日有多个交易时段,且包括隔夜时段。本例中,第一个交易时段为8:45到下午13:45,另一个时段为隔夜时段,从下午15:00到第二天05:00。
使用以下数据模拟:
daySession = 08:45:00.000 : 13:45:00.000
nightSession = 15:00:00.000 : 05:00:00.000
n = 1000000
timestamp = rand(concatDateTime(2019.11.06, daySession[0]) .. concatDateTime(2019.11.08, nightSession[1]), n).sort!()
price = 100+cumsum(rand(0.02, n)-0.01)
volume = rand(1000, n)
symbol = rand(`A120001`A120002`A120003`A120004, n)
trade = select * from table(symbol, timestamp, price, volume) where timestamp.time() between daySession or timestamp.time()>=nightSession[0] or timestamp.time()
计算7分钟K线:
barMinutes = 7
sessionsStart = [daySession[0], nightSession[0]]
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, dailyAlignedBar(timestamp, sessionsStart, barMinutes*60*1000) as barStart
1.3 重叠K线窗口:使用wj
函数
以上例子中,K线窗口均不重叠。若要计算重叠K线窗口,可以使用wj
函数。使用wj
函数,可对左表中的时间列,指定相对时间范围,在右表中进行计算。
例子5 (每日两个交易时段,重叠的K线窗口):模拟中国股票市场数据,每5分钟计算30分钟K线。
n = 1000000
sampleDate = 2019.11.07
symbols = `600519`000001`600000`601766
trade = table(take(sampleDate, n) as date,
(09:30:00.000 + rand(7200000, n/2)).sort!() join (13:00:00.000 + rand(7200000, n/2)).sort!() as time,
rand(symbols, n) as symbol,
100+cumsum(rand(0.02, n)-0.01) as price,
rand(1000, n) as volume)
首先根据时间来生成窗口,并且用cross join来生成股票和交易窗口的组合。
barWindows = table(symbols as symbol).cj(table((09:30:00.000 + 0..23 * 300000).join(13:00:00.000 + 0..23 * 300000) as time))
然后使用wj
函数计算重叠窗口的K线数据:
OHLC = wj(barWindows, trade, 0:(30*60*1000),
<[first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume]>, `symbol`time)
1.4 使用交易量划分K线窗口
上面的例子我们均使用时间作为划分K线窗口的维度。在实践中,也可以使用其他维度作为划分K线窗口的依据。譬如用累计的交易量来计算K线。
例子6 (每日两个交易时段,使用累计的交易量计算K线):模拟中国股票市场数据,交易量每增加10000计算K线。
n = 1000000
sampleDate = 2019.11.07
symbols = `600519`000001`600000`601766
trade = table(take(sampleDate, n) as date,
(09:30:00.000 + rand(7200000, n/2)).sort!() join (13:00:00.000 + rand(7200000, n/2)).sort!() as time,
rand(symbols, n) as symbol,
100+cumsum(rand(0.02, n)-0.01) as price,
rand(1000, n) as volume)
volThreshold = 10000
select first(time) as barStart, first(price) as open, max(price) as high, min(price) as low, last(price) as close
from (select symbol, price, cumsum(volume) as cumvol from trade context by symbol)
group by symbol, bar(cumvol, volThreshold) as volBar
代码采用了嵌套查询的方法。子查询为每个股票生成累计的交易量cumvol,然后在主查询中根据累计的交易量用bar
函数生成窗口。
1.5 使用MapReduce函数加速
若需从数据库中提取较大量级的历史数据,计算K线,然后存入数据库,可使用DolphinDB内置的Map-Reduce函数mr 进行数据的并行读取与计算。这种方法可以显著提高速度。
本例使用美国股票市场精确到纳秒的交易数据。原始数据存于"dfs://TAQ"数据库的"trades"表中。"dfs://TAQ"数据库采用复合分区:基于交易日期Date的值分区与基于股票代码Symbol的范围分区。
(1) 将存于磁盘的原始数据表的元数据载入内存:
login(`admin, `123456)
db = database("dfs://TAQ")
trades = db.loadTable("trades")
(2) 在磁盘上创建一个空的数据表,以存放计算结果。以下代码建立一个模板表(model),并根据此模板表的schema在数据库"dfs://TAQ"中创建一个空的 OHLC 表以存放K线计算结果:
model=select top 1 Symbol, Date, Time.second() as bar, PRICE as open, PRICE as high, PRICE as low, PRICE as close, SIZE as volume from trades where Date=2007.08.01, Symbol=`EBAY
if(existsTable("dfs://TAQ", "OHLC"))
db.dropTable("OHLC")
db.createPartitionedTable(model, `OHLC, `Date`Symbol)
(3) 使用mr
函数计算K线数据,并将结果写入 OHLC 表中:
def calcOHLC(inputTable){
tmp=select first(PRICE) as open, max(PRICE) as high, min(PRICE) as low, last(PRICE) as close, sum(SIZE) as volume from inputTable where Time.second() between 09:30:00 : 15:59:59 group by Symbol, Date, 09:30:00+bar(Time.second()-09:30:00, 5*60) as bar
loadTable("dfs://TAQ", `OHLC).append!(tmp)
return tmp.size()
}
ds = sqlDS()
mr(ds, calcOHLC, +)
在以上代码中,ds是函数sqlDS生成的一系列数据源,每个数据源代表从一个数据分区中提取的数据;自定义函数calcOHLC为Map-Reduce算法中的map函数,对每个数据源计算K线数据,并将结果写入数据库,返回写入数据库的K线数据的行数;"+"是Map-Reduce算法中的reduce函数,将所有map函数的结果,亦即写入数据库的K线数据的行数相加,返回写入数据库的K线数据总数。
2. 实时K线计算
DolphinDB database 中计算实时K线的流程如下图所示:
DolphinDB中计算实时K线流程图
实时数据供应商一般会提供基于Python、Java或其他常用语言的API的数据订阅服务。本例中使用Python来模拟接收市场数据,通过DolphinDB Python API写入流数据表中。DolphinDB的流数据时序聚合引擎(TimeSeriesAggregator)可以对实时数据按照指定的频率与移动窗口计算K线。
本例使用的模拟实时数据源为文本文件trades.csv。该文件包含以下4列(一同给出一行样本数据):
以下三小节介绍实时K线计算的三个步骤:
2.1 使用 Python 接收实时数据,并写入DolphinDB流数据表
DolphinDB 中建立流数据表
share streamTable(100:0, `Symbol`Datetime`Price`Volume,[SYMBOL,DATETIME,DOUBLE,INT]) as Trade
Python程序从数据源 trades.csv 文件中读取数据写入DolphinDB。
实时数据中Datetime的数据精度是秒,由于pandas DataFrame中仅能使用DateTime[64]即nanatimestamp类型,所以下列代码在写入前有一个数据类型转换的过程。这个过程也适用于大多数数据需要清洗和转换的场景。
import dolphindb as ddb
import pandas as pd
import numpy as np
csv_file = "trades.csv"
csv_data = pd.read_csv(csv_file, dtype={'Symbol':str} )
csv_df = pd.DataFrame(csv_data)
s = ddb.session();
s.connect("127.0.0.1",8848,"admin","123456")
#上传DataFrame到DolphinDB,并对Datetime字段做类型转换
s.upload({"tmpData":csv_df})
s.run("data = select Symbol, datetime(Datetime) as Datetime, Price, Volume from tmpData")
s.run("tableInsert(Trade,data)")
2.2 实时计算K线
本例中使用时序聚合引擎createTimeSeriesAggregator函数实时计算K线数据,并将计算结果输出到流数据表OHLC中。
实时计算K线数据,根据应用场景不同,可以分为以下2种情况:
仅在每次时间窗口结束时触发计算
时间窗口完全不重合,例如每隔5分钟计算过去5分钟的K线数据
时间窗口部分重合,例如每隔1分钟计算过去5分钟的K线数据
在每个时间窗口结束时触发计算,同时在每个时间窗口内数据也会按照一定频率更新例如每隔1分钟计算过去1分钟的K线数据,但最近1分钟的K线不希望等到窗口结束后再计算。希望每隔1秒钟更新一次
下面针对上述的几种情况分别介绍如何使用createTimeSeriesAggregator函数实时计算K线数据。请根据实际需要选择相应场景创建时间序列聚合引擎。
2.2.1 仅在每次时间窗口结束时触发计算
仅在每次时间窗口结束时触发计算的情况下,又可以分为时间窗口完全不重合和部分重合两种场景。这两种情况可通过设定createTimeSeriesAggregator函数的windowSize参数和step参数以实现。下面具体说明。
首先定义输出表:
share streamTable(100:0, `datetime`symbol`open`high`low`close`volume,[DATETIME, SYMBOL, DOUBLE,DOUBLE,DOUBLE,DOUBLE,LONG]) as OHLC
然后根据使用场景不同,选择以下任意一种场景创建时间序列聚合引擎。
场景一:每隔5分钟计算一次过去5分钟的K线数据,使用以下脚本定义时序聚合引擎,其中,windowSize参数取值与step参数取值相等
tsAggrKline = createTimeSeriesAggregator(name="aggr_kline", windowSize=300, step=300, metrics=<[first(Price),max(Price),min(Price),last(Price),sum(volume)]>, dummyTable=Trade, outputTable=OHLC, timeColumn=`Datetime, keyColumn=`Symbol)
场景二:每隔1分钟计算过去5分钟的K线数据,可以使用以下脚本定义时序聚合引擎。其中,windowSize参数取值是step参数取值的倍数
tsAggrKline = createTimeSeriesAggregator(name="aggr_kline", windowSize=300, step=60, metrics=<[first(Price),max(Price),min(Price),last(Price),sum(volume)]>, dummyTable=Trade, outputTable=OHLC, timeColumn=`Datetime, keyColumn=`Symbol)
最后,定义流数据订阅。若此时流数据表Trade中已经有实时数据写入,那么实时数据会马上被订阅并注入聚合引擎:
subscribeTable(tableName="Trade", actionName="act_tsaggr", offset=0, handler=append!{tsAggrKline}, msgAsTable=true)
场景一的输出表前5行数据:
2.2.2 在每个时间窗口结束触发计算,同时按照一定频率更新计算结果
以窗口时间1分钟计算vwap价格为例,10:00更新了聚合结果以后,那么下一次更新至少要等到10:01。按照计算规则,这一分钟内即使发生了很多交易,也不会触发任何计算。这在很多金融交易场景中是无法接受的,希望以更高的频率更新信息,为此引入了时序聚合引擎的updateTime参数。
updateTime参数表示计算的时间间隔,如果没有指定updateTime,只有在每个时间窗口结束时,时间序列聚合引擎才会触发一次计算。但如果指定了updateTime,在以下3种情况下都会触发计算:
在每个时间窗口结束时,时间序列聚合引擎会触发一次计算
每过updateTime个时间单位,时间序列聚合引擎都会触发一次计算
如果数据进入后超过2updateTime个时间单位(如果2updateTime不足2秒,则设置为2秒),当前窗口中仍有未计算的数据,时间序列聚合引擎会触发一次计算
这样就能保证时序聚合引擎能在每个时间窗口结束触发计算,同时在每个时间窗口内部也会按照一定频率触发计算。
需要说明的是,时序聚合引擎要求在使用updateTime参数时,必须使用keyedTable作为输出表。具体原因如下:
若将普通的table或streamTable作为输出表table与streamTable不会对重复的数据进行写入限制,因此在数据满足触发updateTime的条件而还未满足触发step的条件时,时序聚合引擎会不断向输出表添加同一个time的计算结果,最终得到的输出表就会有大量时间相同的记录,这个结果就没有意义。
若将keyedStreamTable作为输出表keyedStreamTable不允许更新历史记录,也不允许往表中添加key值相同的记录。往表中添加新记录时,系统会自动检查新记录的主键值,如果新纪录的主键值与已有记录的主键值重复时,新纪录不会被写入。在本场景下表现的结果是,在数据还没有满足触发step的条件,但满足触发updateTime的条件时,时序聚合引擎将最近窗口的计算结果写入到输出表,却因为时间相同而被禁止写入,updateTIme参数同样失去了意义。
使用keyedTable作为输出表keyedTable允许更新,往表中添加新记录时,系统会自动检查新记录的主键值,如果新纪录的主键值与已有记录的主键值重复时,会更新表中对应的记录。在本场景下表现的结果是,同一个时间计算结果可能会发生更新。在数据还没有满足触发step的条件,但满足触发updateTime的条件时,计算结果会被修改为根据最近窗口内的数据进行计算的结果,而不是向输出表中添加一条新的记录。直到数据满足触发step的条件时,才会向输出表中添加新的记录。而这个结果才是我们预期想要达到的效果,因此时序聚合引擎要求在使用updateTime参数时,必须使用keyedTable作为输出表。
例如,要计算窗口为1分钟的K线,但最近1分钟的K线不希望等到窗口结束后再计算。希望每隔1秒钟都更新一次近1分钟的K线数据。我们可以通过如下步骤实现这个场景。
首先,我们需要创建一个keyedTable作为输出表,并将时间列和股票代码列作为主键。当有新的数据注入输出表时,如果新纪录的时间在表中已存在,会更新表中对应时间的记录。这样就能保证每次查询时每个时刻的数据是最新的。
share keyedTable(`datetime`Symbol, 100:0, `datetime`Symbol`open`high`low`close`volume,[DATETIME,SYMBOL,DOUBLE,DOUBLE,DOUBLE,DOUBLE,LONG]) as OHLC
请注意:在使用时序聚合引擎时将
keyedTable作为输出表,若时序聚合引擎指定了keyColumn参数,那么kyedTable需要同时将时间相关列和keyColumn列作为主键。
每隔1分钟计算一次过去1分钟的K线数据,并且每隔1秒钟都更新一次近1分钟的K线数据,可以使用以下脚本定义时序聚合引擎。其中,windowSize参数取值与step参数取值相等,并指定updateTime参数取值为1秒钟,即每隔1秒种更新最近1分钟的数据。下例中的useWindowStartTime参数则用于指定输出表中的时间为数据窗口的起始时间。
tsAggrKline = createTimeSeriesAggregator(name="aggr_kline", windowSize=60, step=60, metrics=<[first(Price),max(Price),min(Price),last(Price),sum(volume)]>, dummyTable=Trade, outputTable=OHLC, timeColumn=`Datetime, keyColumn=`Symbol,updateTime=1, useWindowStartTime=true)
请注意,在使用时间序列聚合引擎时,windowSize必须是step的整数倍,并且step必须是updateTime的整数倍。
最后,定义流数据订阅。若此时流数据表Trade中已经有实时数据写入,那么实时数据会马上被订阅并注入聚合引擎:
subscribeTable(tableName="Trade", actionName="act_tsaggr", offset=0, handler=append!{tsAggrKline}, msgAsTable=true)
输出表的前5行数据:
2.3 在Python中展示K线数据
在本例中,聚合引擎的输出表也定义为流数据表,客户端可以通过Python API订阅输出表,并将计算结果展现到Python终端。
以下代码使用Python API订阅实时聚合计算的输出结果表OHLC,并将结果通过print函数打印出来。
import dolphindb as ddb
import pandas as pd
import numpy as np
#设定本地端口20001用于订阅流数据
s.enableStreaming(20001)
def handler(lst):
print(lst)
# 订阅DolphinDB(本机8848端口)上的OHLC流数据表
s.subscribe("127.0.0.1", 8848, handler, "OHLC")
也可通过Grafana等可视化系统来连接DolphinDB database,对输出表进行查询并将结果以图表方式展现。
你可能感兴趣的:(量化交易干货丨如何使用DolphinDB计算K线)
美团一面,有点难度。
go
一位粉丝朋友分享了最近参与美团民宿旅游业务线的一面的经历,全程约1小时,面试官围绕高并发、分布式事务、性能优化等高频考点展开追问,问题密集且注重落地细节。以下是完整问题整理+回答思路+扩展解析,助你避坑!一、项目与高并发场景1.“介绍一个项目中的难点,并说明QPS和用户量峰值?”回答示例:项目背景:民宿节日大促活动,瞬时流量激增(如春节、国庆),用户抢购特价房源。核心数据:QPS峰值:约8000(
从负数绝对值的计算来看Ruby的一个“奇葩”行为
计算一个数的绝对值是非常基础的操作,几乎所有主流的编程语言都内置了相应的函数或方法。在PHP、Python、SQL等语言中,直接调用abs()函数即可,例如abs(-1)。到了Java、C#这类面向对象的语言中,abs()通常是Math类的静态方法,调用时要加上前缀Math.,即Math.abs(-1)。Go语言就要稍微麻烦一点了,因为math包中的Abs()函数仅支持float64类型的参数,如
Kubernetes (K8S)决定弃用 Docker!Kubernetes (K8S)学习详解
熙媛
学习笔记javadockerjenkinslinux服务器
确实如此。Kubernetes现已弃用Docker!!!目前,Kubernetes中的Docker支持功能现已弃用,并将在之后的版本中被删除。Kubernetes之前使用的是一个名为dockershim的模块,用以实现对Docker的CRI支持。但Kubernetes社区发现了与之相关的维护问题,因此建议大家考虑使用包含CRI完整实现(兼容v1alpha1或v1)的可用容器运行时。简而言之,Doc
python同花顺交易接口_开启量化第一步!同花顺iFinD数据接口免费版简易操作教程...
weixin_39564527
python同花顺交易接口
金融市场波动频繁,投资往往会夹杂非理性的情绪。而量化交易,旨在以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,辅助投资者进行理性投资。不过计算机分析存在一定的技术门槛,有没有简单易学的量化交易方式,能够快速获取有价值的投资策略方案呢?同花顺iFinD数据接口免费版提供简易的操作与丰富的实操案例,将作为引路者,带你迈入量化世界!P
量化交易软件排名有哪些?如何评判其优劣?各软件有何独特之处?
财云量化
python炒股自动化量化交易程序化交易量化交易软件排名优劣评判独特之处股票量化接口股票API接口
炒股自动化:申请官方API接口,散户也可以python炒股自动化(0),申请券商API接口python炒股自动化(1),量化交易接口区别Python炒股自动化(2):获取股票实时数据和历史数据Python炒股自动化(3):分析取回的实时数据和历史数据Python炒股自动化(4):通过接口向交易所发送订单Python炒股自动化(5):通过接口查询订单,查询账户资产股票量化,Python炒股,CSDN
Django视图与URLs路由详解
m0_74824802
面试学习路线阿里巴巴django数据库sqlite
在DjangoWeb框架中,视图(Views)和URLs路由(URLrouting)是Web应用开发的核心概念。它们共同负责将用户的请求映射到相应的Python函数,并返回适当的响应。本篇博客将深入探讨Django的视图和URLs路由系统,提供实际的代码示例和操作指导,确保读者能够具体而实际地了解如何使用这些功能来构建健壮的Web应用。目录Django视图与URLs路由详解一、理解Django视图
3.Halcon3D点云滤波-降采样/去除离群点/直通滤波/平滑计算/凸包计算
黄晓魚
halcon3dPCL点云处理深度神经网络3d
对点云进行滤波的主要意义和目的有以下几点:去除噪声和异常值:由于设备本身的误差或环境因素的影响,采集到的点云数据中可能会包含一些噪声和异常值。这些噪声和异常值会影响后续的点云处理和分析,因此需要通过滤波处理加以去除。提高数据质量:滤波处理可以有效地提高点云数据的质量和精度,使得点云数据更加准确和可靠。这对于后续的点云处理和分析具有重要的意义。局部计算与调整:点云滤波主要通过局部计算的方式,获得一个
15 大 AWS 服务
在云上(oncloudai)
aws云计算
在不断发展的云计算世界中,AmazonWebServices(AWS)已成为一股主导力量,提供许多服务以满足各种应用程序开发、部署和管理方面的需求。本文将探讨15项AWS服务。这些服务对于构建可扩展、可靠且高效的系统至关重要。1.AmazonEC2(弹性计算云)AmazonEC2是AWS的主干,在云中提供可调整大小的计算容量。它允许您启动虚拟服务器、配置安全和网络以及管理存储。使用Terrafor
Paimon实战 -- paimon原理解析
阿华田512
Paimon学习必读系列paimon数据湖paimon介绍flink写入
一.简介ApachePaimon原名FlinkTableStore,2022年1月在ApacheFlink社区从零开始研发,Flink社区希望能够将Flink的Streaming实时计算能力和Lakehouse新架构优势进一步结合,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。二.基本概念1、快照(Snapshot)快照捕获表在某个时间点的状态。用户可以通过最新的快照访
paimon实战 --核心原理和Flink应用进阶
阿华田512
Paimon学习必读系列Flink学习必读系列flink大数据flink读写paimon数据湖
简介Flink社区希望能够将Flink的Streaming实时计算能力和Lakehouse新架构优势进一步结合,推出新一代的StreamingLakehouse技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。Flink社区内部孵化了FlinkTableStore(简称FTS)子项目,一个真正面向Streaming以及Realtime的数据湖存储项目。2023年3月1
Halcon 维测量: 点云数据处理与断线拟合
QfcaLinux
点云
在三维视觉领域,点云数据处理是一项重要的任务。本文将介绍如何使用Halcon来进行点云图转深度图、点云滤波以及断线拟合等维测量操作。我们将通过详细的代码示例来说明每个步骤的实现方法。点云图转深度图:点云图转深度图是将一个由三维点坐标组成的点云数据转换为二维深度图的过程。这对于后续的形状分析和特征提取等任务非常有用。下面是使用Halcon实现点云图转深度图的代码示例:create_scene3d_f
Dav_笔记14:优化程序提示 HINTs -1
Dav_2099
Oracle优化系列笔记java数据库
可以将优化程序提示与SQL语句一起使用来更改执行计划。本章介绍如何使用提示指示优化器使用特定方法。本章包含以下部分:■优化程序提示概述■指定提示■使用带有视图的提示优化程序提示概述提示是对优化器的指令。编写SQL时,您可能知道有关优化程序未知的数据的信息。提示使您可以通常由优化程序做出决策,有时会导致优化程序选择它认为成本较高的计划。在测试或开发环境中,提示对于测试特定访问路径的性能很有用。例如,
位图的深入解析:从数据结构到图像处理与C++实现
Exhausted、
机器学习计算机视觉人工智能图像处理c++算法数据结构开发语言
在学习优选算法课程的时候,博主学习位运算了解到位运算的这个概念,之前没有接触过,就查找了相关的资料,丰富一下自身,当作课外知识来了解一下。位图(Bitmap)是一种用于表示图像的数据结构,它将图像分解为像素的二维网格,每个像素的颜色值存储在一个矩阵中。位图广泛应用于计算机图形学、图像处理和计算机视觉等领域。目录1.位图的基本概念1.1像素1.2分辨率1.3颜色深度2.位图的存储格式2.1BMP格式
高等代数复习:线性空间
爱吃白饭
高等代数线性代数学习笔记
文章目录线性空间定义和性质线性相关性与秩基与维数矩阵的秩同构坐标子空间子空间的定义和性质子空间的和与交直和陪集和商空间解线性方程组本篇文章适合个人复习翻阅,不建议新手入门使用线性空间定义和性质定义:(线性空间)设集合VVV和数域K\mathbb{K}K,在VVV上定义加法+:V×V→V,(α,β)↦α+β+:V\timesV\toV,(\alpha,\beta)\mapsto\alpha+\bet
云计算服务中的“无缝扩展”是什么意思
云上的阿七
云计算
“无缝扩展”(SeamlessScalability)是云计算服务中的一个重要概念,指的是云平台能够根据需求变化自动、平滑地扩展或缩减资源,而不影响系统的正常运行或用户体验。简单来说,就是云服务可以在负载增加或减少时,灵活地调整计算资源、存储容量或网络带宽,且这一过程对用户来说是透明的,没有明显的中断或影响。为什么“无缝扩展”很重要?在现代的云计算环境中,应用和服务的负载会随着时间、流量或业务需求
Python库房管理系统开发指南
Tech Synapse
python开发语言
在现代仓储管理中,高效、准确的信息系统是提高运营效率的关键。Python作为一种强大且易于学习的编程语言,非常适合用来开发简易而功能齐全的库房管理系统。本文将详细介绍如何使用Python编写一个基本的库房管理系统,包括商品入库、出库、查询库存及生成报表等功能。通过本文,读者不仅能学习到Python编程技巧,还能理解库房管理系统的基本架构和逻辑。一、系统需求分析在开发库房管理系统之前,我们需要明确系
常见的深度学习模型总结
编码时空的诗意行者
深度学习人工智能
1.深度前馈神经网络(DeepFeedforwardNetworks)发明时间:2006年左右,随着计算能力的提升和大数据集的可用性增加,深度学习开始兴起。发明动机:解决传统机器学习模型在复杂数据上的局限性,如线性模型无法处理非线性关系的数据。模型特点:由多个隐藏层组成的神经网络,每一层的节点与下一层的节点完全连接。应用场景:分类、回归、语音识别、图像识别等。2.卷积神经网络(Convolutio
手把手教你Linux内核编译:从零开始编写
深度Linux
C/C++全栈开发操作系统linux内存管理内核编译
在计算机技术的广袤星空中,Linux内核宛如一颗最为璀璨而神秘的巨星,散发着无尽的魅力与诱惑。它是操作系统的心脏,掌控着计算机系统的一切核心资源与底层运作。如今,我们即将踏上一场激动人心的冒险之旅——一步步解锁Linux内核,开启从零开始的编程征程。一、简介Linux内核作为操作系统的核心,其魅力在于多方面。首先,它负责资源管理和设备驱动等重要任务。学习Linux内核编程,能够让开发者深入了解操作
使用Python爬虫获取淘宝item_search_tmall API接口数据
API快乐传递者
python淘宝APIpython爬虫开发语言
一、引言在电商运营和市场分析中,获取商品搜索数据是了解市场动态、用户需求和竞争对手的重要手段。淘宝作为国内最大的电商平台之一,提供了丰富的API接口,其中item_search_tmall接口允许开发者通过关键字搜索天猫平台上的商品信息。本文将详细介绍如何使用Python编写爬虫程序,调用淘宝的item_search_tmall接口获取商品搜索数据。二、淘宝item_search_tmall接口简
理解K8S CSI-S3中的节点插件与控制器插件:架构设计与核心职责
孤傲
kubernetes容器云原生
理解K8SCSI-S3中的节点插件与控制器插件:架构设计与核心职责在云原生生态中,Kubernetes已成为容器编排的事实标准,而存储管理则是其核心挑战之一。传统块存储和文件存储已通过CSI(ContainerStorageInterface)插件实现了标准化接入,但对象存储(如AmazonS3)因其独特的接口和语义,需要特殊适配。CSI-S3项目应运而生,它通过标准的CSI接口将S3兼容的对象存
集群lvs
胤要努力学习
服务器网络运维
集群集群概述什么是集群?通过网络连接组合成一个计算机组,来共同完一个任务。而对外表现为一个整体,只提供一个访问入口(域名或IP地址),为用户提供服务,组成集群的服务器称之为群的节点。集群的特性:、)高性能(performance))高可用性)可伸缩性)价格有效性(性价比)集群的种类:负载均衡集群(laodbalancecluster,简称LB):以提高应用系统的响应能力,尽可能处理更多的访问请求,
厘米和磅的转换关系
爱代码的小黄人
MATLABmatlab
在排版和设计领域,厘米(cm)和磅(pt)都是常用的长度度量单位,它们之间的转换关系基于特定的换算标准,下面为你详细介绍:基本换算关系磅是印刷行业常用的长度单位,1英寸等于72磅,而1英寸又等于2.54厘米。由此可以推导出厘米与磅的换算公式:1厘米=72/2.54≈28.35磅1磅=2.54/72≈0.0353厘米换算示例厘米转换为磅若有一个长度为5厘米,将其转换为磅,可以使用上述换算公式进行计算
Python环境搭建与量化交易开发入门指南
量化投资技术
量化科普Python量化miniQMTQMT量化交易量化投资
Python环境搭建与量化交易开发入门指南在量化交易领域,Python因其强大的数据处理能力和丰富的库支持而成为首选编程语言。本文将指导您如何在本地搭建一个适合量化交易的Python环境,并介绍一些常用的代码编辑器和工具。《QMT开通规则分享》更多内容,知识星球搜索:数据与交易Python安装方式一:官网安装(推荐)首先,访问Python官网下载适合的版本。由于xtquant库目前最高支持到Pyt
DataWhale 数学建模导论学习笔记(第一章)
ryanYu_127
学习笔记
要点:利用Python作为计算工具帮助解决数学模型。一、前期准备工作1.AnacondaNavigator帮助安装了NumPy所需的功能包。2.通过Jupyter_Lab,可以直接测试代码运行的结果。3.通过vscode可以修改文本并即时看到预览结果,解决一些符号、公式、表格显示不正常的问题。4.这也是我第一次使用CSDN记录自己的学习笔记。二、进入第一章正题解析方法与几何建模:1.前面的向量和矩
计算机网络之广域网(PPP协议)
DKPT
#计算机网络计算机网络开发语言算法学习笔记
一、定义与用途PPP协议主要用于在两个网络节点之间建立直接连接,并在此连接上进行数据传输。它是为在同等单元之间传输数据包这样的简单链路而设计的,这种链路提供全双工操作,并按照顺序传递数据包。PPP协议是各类型主机、网桥和路由器之间简单连接的一种共通解决方案。二、组成部分PPP协议由三个主要部分组成:数据帧封装方法:用于定义数据在传输过程中的格式。链路控制协议LCP(LinkControlProto
Springboot(五十)SpringBoot3集成sentinel并连接sentinel-dashboard
camellias_
springbootsentinel后端
对,你没看错,又是sentinel。我真是够了,而且,我觉得这应该不是最后一次,以后应该还会写到关于sentinel的学习记录。前边我们了解了sentinel如何使用。相对来讲还是比较简单的。之后学到自定义注解的时候,还自定义了一个sentinel注解来实现限流。用着相对来讲还是很方便的。但是呢,有一个小小的问题。官方推荐使用sentinel-dashboard,这玩意我一直没用明白。我得项目一直
Java进阶之泛型
m0_74824483
面试学习路线阿里巴巴java开发语言
泛型(Generics)定义泛型:允许在定义类、接口和方法时使用类型参数,从而在编译时捕获类型错误,提高代码的类型安全性和复用性。主要用途类型安全:避免类型转换错误,编译时检查类型安全。代码复用:通过泛型可以编写通用的类和方法,适用于多种数据类型。消除强制类型转换:在使用泛型时,编译器会自动进行类型转换,减少代码中的强制类型转换。泛型的基本语法标记符T是类型参数,通常使用T、E、K、V等字母来表示
计算机视觉国内外研究现状(综述)
埃菲尔铁塔_CV算法
计算机视觉
1.国内外研究进展1.2.1特征提取研究进展特征提取是图像处理的一个重要环节,是进行身份识别和行为识别的重要部分。近年来,针对不同特征的提取,国内外学者提出了许多特征提取算法,同样特征提取的效果大都不错。但是在复杂的猪舍环境中提取猪的特征还是比较困难的。下面针对几种目前常用的特征提取算法进行一些介绍。(1)传统的特征提取算法传统特征提取算法已经发展了很久,现阶段比较成熟,是深度学习算法出来之前研究
一、系统分析师考试介绍
Rainbow酱
系统分析系统分析软考
科目1考点考试介绍考试报名、考试科目、大纲及考点分析、证书价值、常见问题。视频课程规划、推荐资料、学习方法。计算机组成与结构数据的表示:进制转换、编码表示、逻辑运算、浮点数。校验码:奇偶校验码、循环冗余校验码、海明校验码。计算机硬件:硬件组成、CPU、寄存器等。计算机指令:寻址方式、指令流水线计算。计算机体系结构:Flynn分类,指令系统CISC和RISC。计算机存储系统:分级存储、cache、存
牛客网面试必刷TOP101-08字符串BM86 大数加法
bingw0114
面试职场和发展
描述以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。数据范围:s.length,t.length≤100000,字符串仅由'0'~‘9’构成要求:时间复杂度O(n)示例1输入:"1","99"返回值:"100"说明:1+99=100示例2输入:"114514",""返回值:"114514"一、问题分析首先读题,仔细看描述中的内容,发现需求是1.以字符串的形式读入两个数字,编
sql统计相同项个数并按名次显示
朱辉辉33
javaoracle
现在有如下这样一个表:
A表
ID Name time
------------------------------
0001 aaa 2006-11-18
0002 ccc 2006-11-18
0003 eee 2006-11-18
0004 aaa 2006-11-18
0005 eee 2006-11-18
0004 aaa 2006-11-18
0002 ccc 20
Android+Jquery Mobile学习系列-目录
白糖_
JQuery Mobile
最近在研究学习基于Android的移动应用开发,准备给家里人做一个应用程序用用。向公司手机移动团队咨询了下,觉得使用Android的WebView上手最快,因为WebView等于是一个内置浏览器,可以基于html页面开发,不用去学习Android自带的七七八八的控件。然后加上Jquery mobile的样式渲染和事件等,就能非常方便的做动态应用了。
从现在起,往后一段时间,我打算
如何给线程池命名
daysinsun
线程池
在系统运行后,在线程快照里总是看到线程池的名字为pool-xx,这样导致很不好定位,怎么给线程池一个有意义的名字呢。参照ThreadPoolExecutor类的ThreadFactory,自己实现ThreadFactory接口,重写newThread方法即可。参考代码如下:
public class Named
IE 中"HTML Parsing Error:Unable to modify the parent container element before the
周凡杨
html解析errorreadyState
错误: IE 中"HTML Parsing Error:Unable to modify the parent container element before the child element is closed"
现象: 同事之间几个IE 测试情况下,有的报这个错,有的不报。经查询资料后,可归纳以下原因。
java上传
g21121
java
我们在做web项目中通常会遇到上传文件的情况,用struts等框架的会直接用的自带的标签和组件,今天说的是利用servlet来完成上传。
我们这里利用到commons-fileupload组件,相关jar包可以取apache官网下载:http://commons.apache.org/
下面是servlet的代码:
//定义一个磁盘文件工厂
DiskFileItemFactory fact
SpringMVC配置学习
510888780
springmvc
spring MVC配置详解
现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。
一、Spring MVC环境搭建:(Spring 2.5.6 + Hi
spring mvc-jfreeChart 柱图(1)
布衣凌宇
jfreechart
第一步:下载jfreeChart包,注意是jfreeChart文件lib目录下的,jcommon-1.0.23.jar和jfreechart-1.0.19.jar两个包即可;
第二步:配置web.xml;
web.xml代码如下
<servlet>
<servlet-name>jfreechart</servlet-nam
我的spring学习笔记13-容器扩展点之PropertyPlaceholderConfigurer
aijuans
Spring3
PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是BeanFactoryPostProcessor接口的一个实现。关于BeanFactoryPostProcessor和BeanPostProcessor类似。我会在其他地方介绍。PropertyPlaceholderConfigurer可以将上下文(配置文件)中的属性值放在另一个单独的标准java P
java 线程池使用 Runnable&Callable&Future
antlove
javathreadRunnablecallablefuture
1. 创建线程池
ExecutorService executorService = Executors.newCachedThreadPool();
2. 执行一次线程,调用Runnable接口实现
Future<?> future = executorService.submit(new DefaultRunnable());
System.out.prin
XML语法元素结构的总结
百合不是茶
xml树结构
1.XML介绍1969年 gml (主要目的是要在不同的机器进行通信的数据规范)1985年 sgml standard generralized markup language1993年 html(www网)1998年 xml extensible markup language
改变eclipse编码格式
bijian1013
eclipse编码格式
1.改变整个工作空间的编码格式
改变整个工作空间的编码格式,这样以后新建的文件也是新设置的编码格式。
Eclipse->window->preferences->General->workspace-
javascript中return的设计缺陷
bijian1013
JavaScriptAngularJS
代码1:
<script>
var gisService = (function(window)
{
return
{
name:function ()
{
alert(1);
}
};
})(this);
gisService.name();
&l
【持久化框架MyBatis3八】Spring集成MyBatis3
bit1129
Mybatis3
pom.xml配置
Maven的pom中主要包括:
MyBatis
MyBatis-Spring
Spring
MySQL-Connector-Java
Druid
applicationContext.xml配置
<?xml version="1.0" encoding="UTF-8"?>
&
java web项目启动时自动加载自定义properties文件
bitray
javaWeb监听器相对路径
创建一个类
public class ContextInitListener implements ServletContextListener
使得该类成为一个监听器。用于监听整个容器生命周期的,主要是初始化和销毁的。
类创建后要在web.xml配置文件中增加一个简单的监听器配置,即刚才我们定义的类。
<listener>
<des
用nginx区分文件大小做出不同响应
ronin47
昨晚和前21v的同事聊天,说到我离职后一些技术上的更新。其中有个给某大客户(游戏下载类)的特殊需求设计,因为文件大小差距很大——估计是大版本和补丁的区别——又走的是同一个域名,而squid在响应比较大的文件时,尤其是初次下载的时候,性能比较差,所以拆成两组服务器,squid服务于较小的文件,通过pull方式从peer层获取,nginx服务于较大的文件,通过push方式由peer层分发同步。外部发布
java-67-扑克牌的顺子.从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的.2-10为数字本身,A为1,J为11,Q为12,K为13,而大
bylijinnan
java
package com.ljn.base;
import java.util.Arrays;
import java.util.Random;
public class ContinuousPoker {
/**
* Q67 扑克牌的顺子 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。
* 2-10为数字本身,A为1,J为1
翟鸿燊老师语录
ccii
翟鸿燊
一、国学应用智慧TAT之亮剑精神A
1. 角色就是人格
就像你一回家的时候,你一进屋里面,你已经是儿子,是姑娘啦,给老爸老妈倒怀水吧,你还觉得你是老总呢?还拿派呢?就像今天一样,你们往这儿一坐,你们之间是什么,同学,是朋友。
还有下属最忌讳的就是领导向他询问情况的时候,什么我不知道,我不清楚,该你知道的你凭什么不知道
[光速与宇宙]进行光速飞行的一些问题
comsci
问题
在人类整体进入宇宙时代,即将开展深空宇宙探索之前,我有几个猜想想告诉大家
仅仅是猜想。。。未经官方证实
1:要在宇宙中进行光速飞行,必须首先获得宇宙中的航行通行证,而这个航行通行证并不是我们平常认为的那种带钢印的证书,是什么呢? 下面我来告诉
oracle undo解析
cwqcwqmax9
oracle
oracle undo解析2012-09-24 09:02:01 我来说两句 作者:虫师收藏 我要投稿
Undo是干嘛用的? &nb
java中各种集合的详细介绍
dashuaifu
java集合
一,java中各种集合的关系图 Collection 接口的接口 对象的集合 ├ List 子接口 &n
卸载windows服务的方法
dcj3sjt126com
windowsservice
卸载Windows服务的方法
在Windows中,有一类程序称为服务,在操作系统内核加载完成后就开始加载。这里程序往往运行在操作系统的底层,因此资源占用比较大、执行效率比较高,比较有代表性的就是杀毒软件。但是一旦因为特殊原因不能正确卸载这些程序了,其加载在Windows内的服务就不容易删除了。即便是删除注册表中的相 应项目,虽然不启动了,但是系统中仍然存在此项服务,只是没有加载而已。如果安装其他
Warning: The Copy Bundle Resources build phase contains this target's Info.plist
dcj3sjt126com
iosxcode
http://developer.apple.com/iphone/library/qa/qa2009/qa1649.html
Excerpt:
You are getting this warning because you probably added your Info.plist file to your Copy Bundle
2014之C++学习笔记(一)
Etwo
C++EtwoEtwoiterator迭代器
已经有很长一段时间没有写博客了,可能大家已经淡忘了Etwo这个人的存在,这一年多以来,本人从事了AS的相关开发工作,但最近一段时间,AS在天朝的没落,相信有很多码农也都清楚,现在的页游基本上达到饱和,手机上的游戏基本被unity3D与cocos占据,AS基本没有容身之处。so。。。最近我并不打算直接转型
js跨越获取数据问题记录
haifengwuch
jsonpjsonAjax
js的跨越问题,普通的ajax无法获取服务器返回的值。
第一种解决方案,通过getson,后台配合方式,实现。
Java后台代码:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String ca
蓝色jQuery导航条
ini
JavaScripthtmljqueryWebhtml5
效果体验:http://keleyi.com/keleyi/phtml/jqtexiao/39.htmHTML文件代码:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>jQuery鼠标悬停上下滑动导航条 - 柯乐义<
linux部署jdk,tomcat,mysql
kerryg
jdktomcatlinuxmysql
1、安装java环境jdk:
一般系统都会默认自带的JDK,但是不太好用,都会卸载了,然后重新安装。
1.1)、卸载:
(rpm -qa :查询已经安装哪些软件包;
rmp -q 软件包:查询指定包是否已
DOMContentLoaded VS onload VS onreadystatechange
mutongwu
jqueryjs
1. DOMContentLoaded 在页面html、script、style加载完毕即可触发,无需等待所有资源(image/iframe)加载完毕。(IE9+)
2. onload是最早支持的事件,要求所有资源加载完毕触发。
3. onreadystatechange 开始在IE引入,后来其它浏览器也有一定的实现。涉及以下 document , applet, embed, fra
sql批量插入数据
qifeifei
批量插入
hi,
自己在做工程的时候,遇到批量插入数据的数据修复场景。我的思路是在插入前准备一个临时表,临时表的整理就看当时的选择条件了,临时表就是要插入的数据集,最后再批量插入到数据库中。
WITH tempT AS (
SELECT
item_id AS combo_id,
item_id,
now() AS create_date
FROM
a
log4j打印日志文件 如何实现相对路径到 项目工程下
thinkfreer
Weblog4j应用服务器日志
最近为了实现统计一个网站的访问量,记录用户的登录信息,以方便站长实时了解自己网站的访问情况,选择了Apache 的log4j,但是在选择相对路径那块 卡主了,X度了好多方法(其实大多都是一样的内用,还一个字都不差的),都没有能解决问题,无奈搞了2天终于解决了,与大家分享一下
需求:
用户登录该网站时,把用户的登录名,ip,时间。统计到一个txt文档里,以方便其他系统调用此txt。项目名
linux下mysql-5.6.23.tar.gz安装与配置
笑我痴狂
mysqllinuxunix
1.卸载系统默认的mysql
[root@localhost ~]# rpm -qa | grep mysql
mysql-libs-5.1.66-2.el6_3.x86_64
mysql-devel-5.1.66-2.el6_3.x86_64
mysql-5.1.66-2.el6_3.x86_64
[root@localhost ~]# rpm -e mysql-libs-5.1
按字母分类:
ABCDEFGHIJKLMNOPQRSTUVWXYZ其他
首页 -
关于我们 -
站内搜索 -
Sitemap -
侵权投诉
版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.