需要帮助!无法解决这个问题,我遇到了硬件限制 - 页 12

 
komposter:


整个数据库到底能不能装下10万行? 所有文件都在一起
 
Candid:

但这些序列是相互独立的,不是吗?那么,为什么我们不能在一个单一加载的序列上一次性地循环查看日期呢?在这里,顺便说一下,也许可以去找一些高效的递归算法,但那是运气好的时候。一百万上的大小将保持,文件将被读取一次。

当然,一个在下一次迭代中步骤数保持不变的问题(即搜索区域不会随着计算的进行而变窄)看起来并不十分稳健。但这是主观的,当然。

当超过缓存限制时,这种维度上的递归将下降。
 
有许多单一类型的交易序列,每个序列都是按时间排序的

Сделки в разных последовательностях разные, по времени распределены неравномерно (и в каждой последовательности по своему). Сделок разное количество. Но все - в интервале от Даты1 до Даты2.

任务是以M分钟的步幅从D1移动到D2(或者更好--完全按所有序列的交易点数),按照标准K找到比其他序列更好的序列(一个单独的任务--不仅仅是找到最佳序列,而是按照标准对整个集合进行排序,并输出前10名--但这是一个可选项,还没有必要)。

标准K的计算是基于相应序列的X个先前的交易,同时计算X个交易中每一个的几乎所有信息(例如,只有利润是不够的)。

这就是我们应该开始的地方。

我是否正确理解了以下内容。

1) 一个20gb的文件由大约一百万个按时间排序的序列组成

2) 每个序列的大小可能不同,取决于序列包含的交易数量

3) 一个序列的平均大小为20/10^6=20Mb,那么我们能保证完全下载一个序列吗?

4) K系数只取决于给定序列中的交易。

5) 对于每个序列,我们必须找到K(总共10^6块)并选择前10块

A 如果我们创建另一个带有序列间距离值的文件。

1) 看看我们可以下载多少个序列,并对它们之间的距离进行求和(保留求和的中间值)。

2) 我们从文件中读取距离到RAM中

3) 对每个序列运行搜索算法到K(我们知道序列的开始位置,因为我们保留了步骤1中计算的小数)。

4) 再次从第1点开始,稍稍向前移动

至于前十名。

n是K的总数值,m是最佳数量。

1)你可以找到所有的K,然后在堆数据结构的帮助下,选择需要的最佳值的数量(获取堆O(n),选择最佳的O(log n)次数m,内存空间-n)

2)计算所需的数量--m个实例(例如,10个),对它们进行排序,并使用二进制搜索来寻找剩余K个实例的插入点。

(初始排序O(m*log m),搜索插入O(log m)次数(n-m),插入O(1),占用内存空间-m)。

 
Urain:
当超过缓存限制时,这些维度上的递归将下降。
在经典的递归中,缓存的大小是固定的。
 
ALXIMIKS:

3)平均序列大小为20/10^6=20MB,什么会完全加载一个序列我们可以保证?

顺便说一句,是的,你可以一次加载成批的序列。
 

我觉得我无法掌握需要什么和给予什么的要领(())。

 А потом "нужная дата" сдвигается на точку закрытия сделки из выбранной последовательности и алгоритм повторяется.

是的,20/10^6=20kb,因为1gb=1000mb=10^6kb

 
YuraZ:

走向SQL


  • 对我来说相对较新(没有仔细工作过,只是基本查询)。

这在学习阶段可能是相当缓慢的。

如果你选择这个选项,最好用存储过程来构建所有的业务逻辑

专家顾问只留下两个功能,向服务器发送请求并获得一个完全完成的结果。

服务器上的所有计算结果

  • 在单一客户机上安装的复杂性(独立版本)。

事实上,在网上你可以找到很多关于如何将SQL服务器

( ORACL, SYBASE + CENTOS为例) ORACL, SYBASE, MS SQL + WINDOWS独立机器

ORACL学习起来比较复杂--专家少,文献少。

MS SQL - 也许是网络上最大的信息量和更多的文献。

不会有任何困难--网上有许多描述,商店里有更多的书。

MSSQL 2012的参数与ORACL非常接近--在2014年已经如此。

SQL + LINUX通常被选择用于生产环境中的操作 - 如果你对LINUX一无所知,最好使用WINDOWS。

MSSQL Expres气球,但限制使用1个核心,1Gb的内存和10Gb的基础

其他人则是有偿的。

 
komposter:
...

有许多类似的交易序列,每个序列都是按时间排序的。

不同序列中的交易是不同的,在时间上分布不均(在每个序列中以不同的方式)。交易的数量是不同的。但所有这些都是在从Date1到Date2的区间内。

任务--以M分钟的步骤从D1移动到D2(或者更好--完全按所有序列的交易点),找到一个序列,按照标准K比其他的更好(一个单独的任务--不仅仅是找到最好的序列,而是按照标准对整个集合进行排序,并输出前10名--但这是一个可选项,还没有必要)。

...

我不明白在哪里。

在从Date1到Date2 的区间内,有一个标准--所有--

康帕斯

一切都是这样的。

然后,"正确的日期 "被转移到所选序列的交易结束点,算法重复进行。

以此类推一百万次 =)

即,下一个是读。

为什么不把文件分成许多 Date1到Date2的间隔?会有花费的序列可以被关闭,对吗?

 
Silent:

我不明白在哪里。

这里的标准是--一切都在Date1和Date2之间

即,其内容如下。

为什么不把文件分成 Date1到Date2的许多区间?会有用完的序列,可以关闭,对吗?

显然,单一日期通行证的结果之一是一个新的日期。
 

如果问题是这样。

给定一个行 1 2 3 4 5 6 7 8 9

给定一个宽度,例如4,你必须用这个宽度穿过整个行,找到宽度内的某个值(例如最小值)。

首先你需要找到1 2 3 4,然后2 3 4 5,然后3 4 5 6,然后4 5 6 7,然后....。等。

那么任务就通过保持队列数据结构 中的最小值来解决。

1) mails.ru视频课程中建议通过四个堆栈数据结构来实现这一点

2)我通过队列数据结构和dec数据结构口头发明了一种实现方式,很可能有人已经做过一次,而且是以他的名字命名的,我只需要找到它。