原始需求:想分析某些股票的历史天交易数据里面满足某些条件的股票。
初步分析:需要股票的基础数据,如名称,编码,交易所等信息,然后就是每天的开票收盘的价格,涨幅等信息。
以为很简单,起始搞起来越滚越大,刚开始以为2个表就够了,没想到搞来搞去,有6个表了。
还好,我们有强大的XCode组件,数据库设计,开发都极其简单,总共零零散散也就10个小时不到就完工了。主要的时间不是写代码,其实60%的时间都是在找资料,分析接口和想怎么设计上面,以及跑数据,还好源数据都保存下来了,重写跑起来很快。
这次开工之前,心里也很忐忑,会不会很复杂,反正是自己想玩和想看,所以抱着试一试的心态,没想到比我想的要简单很多。
此处。。。。。。。。。。。。省略1万字,因为搜索和找了很多资源,最终用的是下面的接口,简单,实测速度快,18年的数据不到20分钟刷刷刷搞下来了。
里面包括了上证和深圳交易所的所有股票代码信息,只需要直接采集即可,速度很快。
如果要做实时,每天更新一次即可,注意:我开始也没注意,股票代码有很多含义,除了交易所之外,还有啥创业板,基金之类的,我没仔细研究,我只把我需要的类型进行了标记。
股票基础数据结构比较简单:
编码(唯一),名称,交易所,类型1是要分析 ,0是暂时忽略的,上市日期
股票历史天数据刚开始想应该很大,找了一些结构才发现,基本每天的主要指标也就10个字段左右,计算一下,每只股票就算20年,也就6000条而已。
即使10000支股票,最多也就6000万而已,所以刚开始的时候直接全部撸到一个表里面了,实际上后面在分析的时候,极其不合理。分析的比较很复杂,搜索非常慢,所以后来我把历史数据进行了拆分,然后分析的时候多线程,速度瞬间提升10倍。由于XCode组件天生对分表分库和数据库反向工程的支持,所以开发起来非常快。
股票历史数据找了很多,最早用的是搜狐的一个接口:javascript:void(0)
它的格式很简单,拼接股票代码和起始结束日期即可,后来还发现它还能查询指数信息:
返回的json格式很标准,使用了Newlife组件的JsonParser类,轻松搞定。根据返回的数据信息,找了几支股票核对一下,就知道其意义了。在后面的数据库设计中会详细描述。说明:采集的时候我是先用临时表统一把返回的结果保存,防止程序有bug,下次又去请求,浪费人家的流量。也是保存在sqliet数据库。
在后面分析的时候,我还用到了板块信息,相当于给每支股票加一个类型,属于什么板块,这样分析的时候有针对性。板块有类型,然后每个类型下面又有一些股票代码,有2个表,数据来源也是搜狐的:
当然如果还要做复杂和完善一点,还有很多数据要采集,比如公司的一些基本信息,我暂时没有用到,后面我会把代码开源,大家随意折腾。
数据库设计我们采用XCode开发的设计规范,都用xml文件,可以自动生成实体类,后面有时间我会针对XCode写一篇开发实践的文章,再一次带大家温习了XCode,在这里感谢@大石头,10多年码农,X组件博大精深,极大的提高了开发效率,简单,简单,简单到你有时候怀疑人生。
10
11
12
13
14
<Table Name="StockBaseInfo" Description="股票基础信息" ConnName="stock_base">
<Columns>
<Column Name="Code" DataType="String" PrimaryKey="True" Description="股票编码" />
<Column Name="Name" DataType="String" Master="True" Description="名称" />
<Column Name="Exchange" DataType="String" Description="交易所" />
<Column Name="Kind" DataType="Int32" Description="类型。1是要分析股票,0是暂时不分析" />
<Column Name="StartDate" DataType="DateTime" Description="上市日期" />
<Column Name="CreateDate" DataType="DateTime" Description="创建时间" />
</Columns>
<Indexes>
<Index Columns="Name" />
<Index Columns="StartDate" />
</Indexes>
</Table>
其实在项目代码的xml文件表结构中,还有一个历史信息,就是一次性获取所有历史Josn文本存储,避免重复抓取Josn数据。结构很简单,就不贴了。
10
11
12
13
14
15
16
17
<Table Name="StockDayData" Description="股票日数据" ConnName="stock_day">
<Columns>
<Column Name="ID" DataType="String" PrimaryKey="True" Description="编号。code+日期" />
<Column Name="Code" DataType="String" Description="股票编码" />
<Column Name="StatDate" DataType="DateTime" Description="数据日期" />
<Column Name="StartPrice" DataType="Double" Description="开盘价格" />
<Column Name="EndPrice" DataType="Double" Description="收盘价格" />
<Column Name="ChangePrice" DataType="Double" Description="涨跌金额" />
<Column Name="ChangeRatio" DataType="Double" Description="涨跌幅度" />
<Column Name="LowPrice" DataType="Double" Description="最低价格" />
<Column Name="HighPrice" DataType="Double" Description="最高价格" />
<Column Name="TotalHand" DataType="Int32" Description="总手" />
<Column Name="TotalAmount" DataType="Double" Description="总金额(万)" />
<Column Name="HandRate" DataType="Double" Description="换手率" />
<Column Name="UpdateDate" DataType="DateTime" Description="更新日期" />
</Columns>
</Table>
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<Table Name="GroupKind" Description="板块分类" ConnName="stock_base">
<Columns>
<Column Name="ID" DataType="String" PrimaryKey="True" Description="编码。url相关" />
<Column Name="Name" DataType="String" Master="True" Description="板块名称" />
<Column Name="Kind" DataType="String" Description="分类。1.行业,2地域,3.概念" />
<Column Name="Total" DataType="Int32" Description="总数" />
<Column Name="CreateDate" DataType="DateTime" Description="创建时间" />
</Columns>
<Indexes>
<Index Columns="Kind" />
<Index Columns="Name" />
</Indexes>
</Table>
<Table Name="StockGroup" Description="股票板块信息" ConnName="stock_base">
<Columns>
<Column Name="ID" DataType="String" PrimaryKey="True" Description="编号。groupid+stockid" />
<Column Name="GroupID" DataType="String" Description="板块ID" />
<Column Name="Kind" DataType="String" Description="分类。1.行业,2地域,3.概念" />
<Column Name="Code" DataType="String" Description="股票代码" />
<Column Name="StockName" DataType="String" Description="股票名称" />
<Column Name="CreateDate" DataType="DateTime" Description="创建时间" />
</Columns>
<Indexes>
<Index Columns="GroupID" />
<Index Columns="Code" />
</Indexes>
</Table>
下面我们把数据采集过程简单分析一下,然后把源代码和数据库共享给大家。套路很简单,熟悉起来很快就可以搞定。
我的博客中,前几年,写过好几篇关于C#数据采集的方法,套路都比较通用,主要是:HtmlAgilityPack + XCode
C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
HtmlAgilityPack是.NET 下的一个强大的HTML 解析类库,支持用 XPath 。配合上自带的HAPExplorer,很快就可以解决问题。
我们发现上海和深圳交易所的列表分别在下面位置:
/html[1]/body[1]/div[9]/div[2]/div[1]/ul[1]
/html[1]/body[1]/div[9]/div[2]/div[1]/ul[2]
还往下一个层级就是li标签列表,在HtmlAgilityPack中有现成的方法获取整个列表,并进行解析,如下面代码:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/// 获取所有股票代码和名称基础信息
public static void ReadAllStockBaseInfo()
{
//上海:/html[1]/body[1]/div[9]/div[2]/div[1]/ul[1]
//下级是li列表 ,Text值就是股票名称和代码 XXX()
//深圳:上海:/html[1]/body[1]/div[9]/div[2]/div[1]/ul[2]
HtmlWeb htmlweb = new HtmlWeb();
Dictionary<string, string> dic = new Dictionary<string, string>()
{
{"上海",@"/html[1]/body[1]/div[9]/div[2]/div[1]/ul[1]" },
{"深圳",@"/html[1]/body[1]/div[9]/div[2]/div[1]/ul[2]" }
};
#region 获取
Dictionary<String, StockBaseInfo> list = new Dictionary<string, StockBaseInfo>();
foreach (var item in dic)
{
//获取所有子节点
{
foreach (var node in res)
{
//获取名称和代码
StockBaseInfo et = new StockBaseInfo()
{
Code = str[1],
Name = str[0],
StartDate = new DateTime(2000, 1, 1),
};
{
}
}
}
}
#endregion
}
获取到子节点后,解析名称,然后用批量Insert到数据库。
用XCode默认都是使用Sqlite数据库,轻量级,非常方便,数据库表结构都是自动新建。
这里对老司机来说,其实没多少难度,就是拼接URL,请求获取json数据,然后解析json格式,我解析用了Newlife的JsonParser,用起来很简单有空我单独讲一下,就是把Json用字典和List<Object>保存下来,知道结构后,直接强制转换和取值即可。上代码:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static void GetHistoryFromWeb(string stockCode, DateTime start, DateTime end,string type="cn")
{
WebClientX client = new WebClientX();
var doc = new HtmlDocument();
var et = new StockHisText()
{
Code = stockCode,
Start = start,
End = end,
HisText = value
};
try
{
}
catch(Exception err)
{
}
}
上面是获取单个股票其指定日期范围内的历史数据,直接到历史表,下面是解析部分,外面套的循环就不贴代码了,可以下载源代码看。
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public static void PraseHistoryData()
{
var all = FindAll();
int index = 1;
{
#region 单个文本解析
JsonParser jp = new JsonParser(all[i].HisText);
var main = (Dictionary<string, object>)decode[0];//字典
{
var obj = (List<object>)main["hq"];
{
List<StockDayData> res = new List<StockDayData>();
foreach (var item in obj)
{
#region 单条记录解析
//item是一个10个元素的数组
//日期,今开价格,今天收盘价格,涨跌金额,涨跌幅度,最低价格,最高价格,总手,总金额(万),换手率
var list = (List<object>)item;
StockDayData sd = new StockDayData()
{
Code = all[i].Code,
StatDate = list[0].ToDateTime(),
StartPrice = list[1].ToDouble(),
EndPrice = list[2].ToDouble(),
ChangePrice = list[3].ToDouble(),
ChangeRatio = ((string)list[4]).Replace("%", "").ToDouble(),
LowPrice = list[5].ToDouble(),
HighPrice = list[6].ToDouble(),
TotalHand = list[7].ToInt(),
TotalAmount = list[8].ToDouble(),
HandRate = ((string)list[9]).Replace("%", "").ToDouble(),
};
#endregion
}
}
}
#endregion
});
}
原始需求:想分析某些股票的历史天交易数据里面满足某些条件的股票。
初步分析:需要股票的基础数据,如名称,编码,交易所等信息,然后就是每天的开票收盘的价格,涨幅等信息。
以为很简单,起始搞起来越滚越大,刚开始以为2个表就够了,没想到搞来搞去,有6个表了。
还好,我们有强大的XCode组件,数据库设计,开发都极其简单,总共零零散散也就10个小时不到就完工了。主要的时间不是写代码,其实60%的时间都是在找资料,分析接口和想怎么设计上面,以及跑数据,还好源数据都保存下来了,重写跑起来很快。
这次开工之前,心里也很忐忑,会不会很复杂,反正是自己想玩和想看,所以抱着试一试的心态,没想到比我想的要简单很多。
此处。。。。。。。。。。。。省略1万字,因为搜索和找了很多资源,最终用的是下面的接口,简单,实测速度快,18年的数据不到20分钟刷刷刷搞下来了。
里面包括了上证和深圳交易所的所有股票代码信息,只需要直接采集即可,速度很快。
股票基础数据结构比较简单:
编码(唯一),名称,交易所,类型1是要分析 ,0是暂时忽略的,上市日期
股票历史天数据刚开始想应该很大,找了一些结构才发现,基本每天的主要指标也就10个字段左右,计算一下,每只股票就算20年,也就6000条而已。
即使10000支股票,最多也就6000万而已,所以刚开始的时候直接全部撸到一个表里面了,实际上后面在分析的时候,极其不合理。分析的比较很复杂,搜索非常慢,所以后来我把历史数据进行了拆分,然后分析的时候多线程,速度瞬间提升10倍。由于XCode组件天生对分表分库和数据库反向工程的支持,所以开发起来非常快。
它的格式很简单,拼接股票代码和起始结束日期即可,后来还发现它还能查询指数信息:
返回的json格式很标准,使用了Newlife组件的JsonParser类,轻松搞定。根据返回的数据信息,找了几支股票核对一下,就知道其意义了。在后面的数据库设计中会详细描述。说明:采集的时候我是先用临时表统一把返回的结果保存,防止程序有bug,下次又去请求,浪费人家的流量。也是保存在sqliet数据库。
在后面分析的时候,我还用到了板块信息,相当于给每支股票加一个类型,属于什么板块,这样分析的时候有针对性。板块有类型,然后每个类型下面又有一些股票代码,有2个表,数据来源也是搜狐的:
当然如果还要做复杂和完善一点,还有很多数据要采集,比如公司的一些基本信息,我暂时没有用到,后面我会把代码开源,大家随意折腾。
数据库设计我们采用XCode开发的设计规范,都用xml文件,可以自动生成实体类,后面有时间我会针对XCode写一篇开发实践的文章,再一次带大家温习了XCode,在这里感谢@大石头,10多年码农,X组件博大精深,极大的提高了开发效率,简单,简单,简单到你有时候怀疑人生。
10
11
12
13
14
<Table Name="StockBaseInfo" Description="股票基础信息" ConnName="stock_base">
<Columns>
<Column Name="Code" DataType="String" PrimaryKey="True" Description="股票编码" />
<Column Name="Name" DataType="String" Master="True" Description="名称" />
<Column Name="Exchange" DataType="String" Description="交易所" />
<Column Name="Kind" DataType="Int32" Description="类型。1是要分析股票,0是暂时不分析" />
<Column Name="StartDate" DataType="DateTime" Description="上市日期" />
<Column Name="CreateDate" DataType="DateTime" Description="创建时间" />
</Columns>
<Indexes>
<Index Columns="Name" />
<Index Columns="StartDate" />
</Indexes>
</Table>
其实在项目代码的xml文件表结构中,还有一个历史信息,就是一次性获取所有历史Josn文本存储,避免重复抓取Josn数据。结构很简单,就不贴了。
10
11
12
13
14
15
16
17
<Table Name="StockDayData" Description="股票日数据" ConnName="stock_day">
<Columns>
<Column Name="ID" DataType="String" PrimaryKey="True" Description="编号。code+日期" />
<Column Name="Code" DataType="String" Description="股票编码" />
<Column Name="StatDate" DataType="DateTime" Description="数据日期" />
<Column Name="StartPrice" DataType="Double" Description="开盘价格" />
<Column Name="EndPrice" DataType="Double" Description="收盘价格" />
<Column Name="ChangePrice" DataType="Double" Description="涨跌金额" />
<Column Name="ChangeRatio" DataType="Double" Description="涨跌幅度" />
<Column Name="LowPrice" DataType="Double" Description="最低价格" />
<Column Name="HighPrice" DataType="Double" Description="最高价格" />
<Column Name="TotalHand" DataType="Int32" Description="总手" />
<Column Name="TotalAmount" DataType="Double" Description="总金额(万)" />
<Column Name="HandRate" DataType="Double" Description="换手率" />
<Column Name="UpdateDate" DataType="DateTime" Description="更新日期" />
</Columns>
</Table>
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<Table Name="GroupKind" Description="板块分类" ConnName="stock_base">
<Columns>
<Column Name="ID" DataType="String" PrimaryKey="True" Description="编码。url相关" />
<Column Name="Name" DataType="String" Master="True" Description="板块名称" />
<Column Name="Kind" DataType="String" Description="分类。1.行业,2地域,3.概念" />
<Column Name="Total" DataType="Int32" Description="总数" />
<Column Name="CreateDate" DataType="DateTime" Description="创建时间" />
</Columns>
<Indexes>
<Index Columns="Kind" />
<Index Columns="Name" />
</Indexes>
</Table>
<Table Name="StockGroup" Description="股票板块信息" ConnName="stock_base">
<Columns>
<Column Name="ID" DataType="String" PrimaryKey="True" Description="编号。groupid+stockid" />
<Column Name="GroupID" DataType="String" Description="板块ID" />
<Column Name="Kind" DataType="String" Description="分类。1.行业,2地域,3.概念" />
<Column Name="Code" DataType="String" Description="股票代码" />
<Column Name="StockName" DataType="String" Description="股票名称" />
<Column Name="CreateDate" DataType="DateTime" Description="创建时间" />
</Columns>
<Indexes>
<Index Columns="GroupID" />
<Index Columns="Code" />
</Indexes>
</Table>
下面我们把数据采集过程简单分析一下,然后把源代码和数据库共享给大家。套路很简单,熟悉起来很快就可以搞定。
我的博客中,前几年,写过好几篇关于C#数据采集的方法,套路都比较通用,主要是:HtmlAgilityPack + XCode
C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
HtmlAgilityPack是.NET 下的一个强大的HTML 解析类库,支持用 XPath 。配合上自带的HAPExplorer,很快就可以解决问题。
我们发现上海和深圳交易所的列表分别在下面位置:
/html[1]/body[1]/div[9]/div[2]/div[1]/ul[1]
/html[1]/body[1]/div[9]/div[2]/div[1]/ul[2]
还往下一个层级就是li标签列表,在HtmlAgilityPack中有现成的方法获取整个列表,并进行解析,如下面代码:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/// 获取所有股票代码和名称基础信息
public static void ReadAllStockBaseInfo()
{
//上海:/html[1]/body[1]/div[9]/div[2]/div[1]/ul[1]
//下级是li列表 ,Text值就是股票名称和代码 XXX()
//深圳:上海:/html[1]/body[1]/div[9]/div[2]/div[1]/ul[2]
HtmlWeb htmlweb = new HtmlWeb();
Dictionary<string, string> dic = new Dictionary<string, string>()
{
{"上海",@"/html[1]/body[1]/div[9]/div[2]/div[1]/ul[1]" },
{"深圳",@"/html[1]/body[1]/div[9]/div[2]/div[1]/ul[2]" }
};
#region 获取
Dictionary<String, StockBaseInfo> list = new Dictionary<string, StockBaseInfo>();
foreach (var item in dic)
{
//获取所有子节点
{
foreach (var node in res)
{
//获取名称和代码
StockBaseInfo et = new StockBaseInfo()
{
Code = str[1],
Name = str[0],
StartDate = new DateTime(2000, 1, 1),
};
{
}
}
}
}
#endregion
}
获取到子节点后,解析名称,然后用批量Insert到数据库。
用XCode默认都是使用Sqlite数据库,轻量级,非常方便,数据库表结构都是自动新建。
这里对老司机来说,其实没多少难度,就是拼接URL,请求获取json数据,然后解析json格式,我解析用了Newlife的JsonParser,用起来很简单有空我单独讲一下,就是把Json用字典和List<Object>保存下来,知道结构后,直接强制转换和取值即可。上代码:
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static void GetHistoryFromWeb(string stockCode, DateTime start, DateTime end,string type="cn")
{
WebClientX client = new WebClientX();
var doc = new HtmlDocument();
var et = new StockHisText()
{
Code = stockCode,
Start = start,
End = end,
HisText = value
};
try
{
}
catch(Exception err)
{
}
}
上面是获取单个股票其指定日期范围内的历史数据,直接到历史表,下面是解析部分,外面套的循环就不贴代码了,可以下载源代码看。
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public static void PraseHistoryData()
{
var all = FindAll();
int index = 1;
{
#region 单个文本解析
JsonParser jp = new JsonParser(all[i].HisText);
var main = (Dictionary<string, object>)decode[0];//字典
{
var obj = (List<object>)main["hq"];
{
List<StockDayData> res = new List<StockDayData>();
foreach (var item in obj)
{
#region 单条记录解析
//item是一个10个元素的数组
//日期,今开价格,今天收盘价格,涨跌金额,涨跌幅度,最低价格,最高价格,总手,总金额(万),换手率
var list = (List<object>)item;
StockDayData sd = new StockDayData()
{
Code = all[i].Code,
StatDate = list[0].ToDateTime(),
StartPrice = list[1].ToDouble(),
EndPrice = list[2].ToDouble(),
ChangePrice = list[3].ToDouble(),
ChangeRatio = ((string)list[4]).Replace("%", "").ToDouble(),
LowPrice = list[5].ToDouble(),
HighPrice = list[6].ToDouble(),
TotalHand = list[7].ToInt(),
TotalAmount = list[8].ToDouble(),
HandRate = ((string)list[9]).Replace("%", "").ToDouble(),
};
#endregion
}
}
}
#endregion
});
}
在Python中,根据历史数据进行预测通常会用到统计分析和机器学习的方法。这里我给你一个简单的例子,展示如何使用Python中的时间序列预测方法来根据历史数据进行预测。我们将使用statsmodels库来进行时间序列分析,使用ARIMA模型(自回归积分滑动平均模型)进行预测。首先,你需要安装statsmodels和pandas库,如果你还没有安装,可以使用以下命令:pip install sta
作为Python开发者,我们经常遇到需要从各种来源和格式(如 PDF、CSV、HTML等)中提取数据的情况。在这篇文章中,我们将深入研究从PDF文件中解析数据,并介绍一些对解析其他数据格式有用的 Python 包。用Python解析PDF文件PDF是一种标准文件格式,广泛用于共享和打印文件。不幸的是,由于其复杂的结构,当涉及到数据提取时,它并不是最容易的格式。幸运的是,Python提供了几个库,可以帮助我们从PDF文件中提取数据,比如PyPDF2和PDFMiner。
一、引子在05篇中我们学习了如何使用流程变量,如果业务需求为固定的内容,其实流程变量就可以当“表单”使用的,K-V的结构几乎天然支持了这部分。但是,如果你的业务需求需要用户灵活定制流程变量,这里用文字说明可能有的同学不太理解,具体案例大家可以去参考钉钉的工作流,用户可以在每个节点自己定义和管理变量,这种场景流程变量就无法很好地支持了,就需要用到Flowable提供的表单来操作了。上述的内容
# Hadoop 历史数据采集:从理论到实践## 引言随着大数据时代的到来,数据采集和处理成为了企业和开发者关注的焦点。Hadoop作为大数据处理的基石,其历史数据采集功能尤为重要。本文将从理论到实践,探讨如何利用Hadoop进行历史数据采集,并提供代码示例和状态图、旅行图来帮助读者更好地理解。## Hadoop 简介Hadoop是一个开源的分布式存储和计算框架,由Hadoop分布
# MySQL 中的历史数据管理在现代数据库系统中,历史数据的管理是一个不可或缺的部分。历史数据是指不再经常改变的数据,但对于业务分析和决策制定依然具有重要价值。MySQL 作为流行的关系数据库管理系统,提供了一些工具和功能来有效管理和查询历史数据。## 什么是历史数据?历史数据是系统在特定时间点的状态快照。这些数据可用于各种用途,如审计、趋势分析和报告生成。在许多行业,如金融、电商和
各种股票软件,例如通达信、同花顺、大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想做更复杂的分析,例如回归分析、关联分析等就有点捉襟见肘,所以最好能够获取股票历史及实时数据并存储到数据库,然后再通过其他工具,例如SPSS、SAS、EXCEL或者其他高级编程语言连接数据库获取股票数据进行定量分析,
# Python爬取所有股票历史数据在金融行业,股票历史数据对于分析和预测市场趋势至关重要。借助Python,我们可以轻松爬取所有股票的历史数据。接下来,我将通过一个详细的示例,指导您如何使用Python来实现这一目标。## 环境准备在开始之前,确保您已经安装了以下库:```bashpip install requests pandas beautifulsoup4```-
清理脚本#!/bin/bashDate=`date -d $(date -d "-30 day" +%Y%m%d) +%s`/usr/local/mysql/bin/mysql --login-path=zabbix -e"use zabbix;DELETE FROM h
项目上线不到一个月,zabbix数据居然快100G,监控项太多,数据量太大,zabbix负载重,暂时不想升级硬件,只好内部挖掘下,清除下历史数据;一般保留1个月的数据,zabbix这个项目只是做监控报警用,数据保留太多没太大参考意义; 一般都是这几个表太大, history, history_uint,history_log
获取openfalcon历史数据
# MongoDB历史数据转存在实际应用中,我们经常需要对MongoDB中的历史数据进行转存或者备份,以便后续的数据分析、报表生成或者数据迁移等操作。本文将介绍如何使用Python和MongoDB的客户端工具来实现MongoDB历史数据的转存操作。## MongoDB历史数据转存的场景在实际应用中,我们可能会遇到以下场景需要对MongoDB历史数据进行转存:1. 数据备份:定期将M
# 使用 MongoDB 存储历史数据的指南在现代应用开发中,存储历史数据是一个常见需求。在这篇文章中,我将告诉你如何使用 MongoDB 来存储历史数据。接下来,我们将通过一系列步骤帮助你理解整个过程。## 流程概述我们将按照以下步骤来存储历史数据:| 步骤 | 描述 ||------|------
一 应用场景描述前面介绍了两种处理Zabbix历史数据的解决办法,但是如果当监控数据继续增长的话是不足以解决问题的。办法一适合在没有做表分区的情况下,只保留一段时间的数据,比如一个月,然后把老的数据删除再使用方法二,这种操作执行时间长。办法二是使用MySQL自带的表分区功能,将history等表按照日期进行分区,然后只保留一段时间的数据。但是即使使用表分区功能定期删除不用的分区数据,也会有瓶颈产生
由于量化策略研究需要用到尽量全的历史数据,包括:股票、外汇、期货、基金等等的分钟、小时、日历史数据,而且数据尽量全,最好能从九几年起。所以我在网上做了较多的搜查以找到可用的数据源。以下分别列出几个方案,并讨论其优缺,最后总结出一条可行的路。 Tushare 数据接口:该接口基本是使用新浪的数据源做一个python的封装。而且目前只针对股票,能获取到日线数据较为完整。分钟线和小时
在实际业务中,累计5年的历史业务数据可能比较大,比如可能超过1T的数据,这时可能就会影响业务处理 OLTP的运行效率,一般是将5年以上的数据归档的其他地方,同时从当前业务系统中删除。 有各位哥们对这个过程比较熟悉,ORACLE ERP时什么策略呢? 请高手指点。 DBX archiver的功能就是把历史数据放在另一个数据库中,如果在prod中的查询涉及到历史数据,就会到历史库中取数据,实现对客户的
读取ExecuteReader 写入SqlBulkCopy 创建归档临时表和非归档临时表 读取源表,按归档日期分别写入归档临时表和非归档临时表,记录首条数据 读取源表(写入期间入库的数据),写入非归档临时表 非归档临时表创建索引、分区 非归档临时表改为源表 Drop源表 读取归档临时表写入指定服务器 ...
zabbix监控中在对创建项目时,需要设置两个属性:Historyandtrends(历史数据和趋势数据的保存时间,以天数为单位)如下图所示:历史数据和趋势数据是zabbix存储数据的两种方式,它们都是以天数为单位的。历史数据:zabbix监控到的数据在数据库中保存的天数,过去这个时间便会自动的被zabbix的管理机制删除,所以强烈建议历史数据保存所允许的尽可能小的天数,这样是为了防止数据库负载太