问题标签 [partitioning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 数据库中的历史行管理
与许多数据库一样,我正在设计一个数据库,该数据库应记录每个表中更改的行的先前版本。
这个问题的标准解决方案是为每个数据表保留一个历史表,并且每当需要更新数据表中的行时,将当前行的副本插入到历史表中,而不是数据表中的行得到更新。
这个解决方案对我的缺点:
- 维护 2 个表而不是 1 个,(以防表结构需要更改)
- 应用程序需要知道两个表而不是一个
- 表名可能需要简短以保持表名和历史表名的约定(例如 SOME_TABLE、SOME_TABLE_HIST)
我正在考虑一个不同的解决方案,想知道它是否可以。对于每个表,我们添加列 IS_LAST
- 当一行被插入到表中时,它将以 IS_LAST=1 插入。
- 当一行被更新时,原始行的副本将被复制到同一张表中,同时 IS_LAST=0 的更改,并且原始行将根据需要进行更新(仍然保持 IS_LAST=1)。
假设在我的情况下,行平均更新 10 次。还假设应用程序执行的至少 90% 的操作仅发生在最新版本的行上。
我的数据库是 Oracle 10g,因此为了保持“活动”表的精简,我们可以将表拆分为 2 个分区:IS_LAST=1 分区和 IS_LAST=0 分区。
分区是解决历史数据保存问题的好方法吗?
此解决方案是否会限制这些表的其他分区潜力?
谢谢!
sql-server-2005 - 我可以使用 SQL Server 分区来优化全文搜索吗?
我有一个带有全文索引列的非常大的表。如果我明智地分区这个表(对我来说,明智地是按日期),它会加快查询速度吗?或者,即使查询限制为单个分区,全文子句仍会搜索整个表吗?
从我目前所见,我认为答案是分区无济于事。所以最好的选择是有价值的答案。例如,为每个日期范围创建表格并通过执行 [???] 轻松维护它们。
编辑:目前非常大是 450 万行,但会随着时间的推移而激增(明天可能是 2000 万行,所以我想为此做好计划)。在硬件方面,我很无知。我知道当全文查询返回大量行时查询很慢,即使整个查询没有。不确定这是否意味着它是计算限制或 IO 限制,或者是否有足够的信息来判断。
windows - 跨平台的分区管理库?
我正在寻找可以在 Windows 和 Linux 上运行的某种分区管理库(最好是 Python 的,但任何东西都可以)。(特别是用于使用 USB 设备,但任何硬盘工具都应该这样做)
我们宁愿不实现两个不同的库,因为这会使其更难维护,但到目前为止,我们还没有找到任何在这方面提供跨平台兼容性的东西。
这是给用户分区 USB 闪存棒的(我应该把它放在问题中),我们希望他们不知道如何分区,更不用说以我们的方式进行分区了。我们的具体案例是使用以特殊方式制作的 EXT3 文件系统设置 USB 闪存驱动器(以便与 USB_ZIP 兼容)
mysql - 用于数据库分片的 MySQL 代理替代方案
MySQL 代理是否有任何替代方案。我不想使用它,因为它仍处于 alpha 阶段。
我将有 10 个 MySQL 服务器,其中 table_1 table_2 table_3 table_4 ... table_10 分布在 10 个服务器上。每个表的结构都是相同的,它们只是具有不同数据集的分片。
是否有 MySQL 代理的替代方案,我可以让我的客户端应用程序连接到单个 SQL Server(代理),它查看查询并代表它获取数据。
例如,如果客户端从 Proxy 请求“SELECT * FROM table_5 WHERE user=123”,它连接到包含 table_5 的第 5 个 SQL Server 并获取数据?
sql - 将 SQL 结果分成范围
我想对按数字索引的成员列表进行简单查询,并将它们分组到相同大小的“桶”中。所以基本查询是:
假设我得到了 1000 个成员索引号,现在我想通过最大和最小成员索引将它们分成 10 个大小相等的组。就像是:
0 到 400 中的活跃成员:100 401 到 577 中的活跃成员:100 ... 1584 到 1765 中的活跃成员:100
我能想到的最好的办法是重复查询 max(my_members.member_index) 并增加 rownum 限制:
algorithm - 寻找附近点的算法?
给定一组具有 x,y 坐标的数百万个点,选择什么算法可以快速找到距某个位置最近的 1000 个点?这里的“快速”是指家用计算机上大约 100 毫秒。
蛮力意味着进行数百万次乘法然后对它们进行排序。虽然即使是一个简单的 Python 应用程序也可以在不到一分钟的时间内完成,但对于交互式应用程序来说仍然太长了。
这些点的边界框是已知的,因此可以将空间划分为一个简单的网格。然而,这些点的分布有些不均匀,所以我怀疑大多数网格方块会是空的,然后突然其中一些会包含大部分点。
编辑:不一定要准确,实际上可能非常不准确。例如,如果前 1000 名实际上只是前 2000 名中的一些随机点,那将不是什么大问题。
编辑:点集很少改变。
linux - 使用 parted 将带有 parted 的设备格式化为特定模式
这确实是一个分开的使用问题,但欢迎提出其他关于如何实现这一点的想法。
我需要创建一个引导设备,设置如下:
(最多 4MB 擦除块大小 (EBS)):
通过使用 32 个扇区/磁道和 128 个磁头并使用奇数起始编号(从 1 开始计数)在 4MB 块上对齐分区
MBR:syslinux MBR 引导加载程序
分区 1: FAT16 (0x06), 32MB, 标准布局, syslinux setup + kernel
分区 4:分区 1 的副本(是的,在 part2 的前面!)
分区 2:LVM,磁盘的剩余部分
partitioning - 如何将问题划分为更小的可理解部分?
我不确定是否可以就该主题提供一般性建议,但请尝试。很难解释我的情况,因为它太复杂而无法解释。这正是问题所在。
我似乎经常偶然发现我尝试设计项目的某些部分的情况,但是要考虑的事情太多了,我无法掌握它。
是否有任何关于如何一次查看我的系统的一般提示或建议?如何找到可以单独设计的较小部分?
python - 在 KenKen 拼图“乘法”域中查找所有可能的因素
KenKen 拼图是一个拉丁方格,分为边缘连接的域:单个单元格、同一行或列中的两个相邻单元格、排成一行或一列的三个单元格等。每个域都有一个标签,该标签给出了一个目标数字和单个算术运算 (+-*/),该运算将应用于域单元格中的数字以产生目标数字。(如果域只有一个单元格,则没有给出运算符,只有一个目标 --- 为您求解正方形。如果运算符是 - 或 /,则域中只有两个单元格。)难题是(重新)构建与域的边界和标签一致的拉丁方。(我想我只见过一次具有非唯一解的谜题。)
单元格中的数字可以从 1 到拼图的宽度(高度);通常,拼图的一侧有 4 或 6 个单元格,但可以考虑任何大小的拼图。已发布的谜题(4x4 或 6x6)中的域通常不超过 5 个单元格,但同样,这似乎不是硬性限制。(但是,如果拼图只有一个域,那么解决方案将与该维度的拉丁方格一样多......)
编写 KenKen 求解器的第一步是拥有可以在任何域中产生可能的数字组合的例程,首先忽略域的几何形状。(线性域,例如一行三个单元格,在已解决的难题中不能有重复的数字,但我们暂时忽略这一点。)我已经能够编写一个 Python 函数来处理逐个添加标签:给它拼图的宽度、域中的单元格数量和目标总和,它返回一个由有效数字加起来到目标的元组的列表。
乘法的情况让我无法理解。我可以得到一个字典,其键等于给定大小的谜题中给定大小的域中可达到的产品,其值是包含给出产品的因素的元组列表,但我无法解决一个案例- 逐案例程,甚至不是一个糟糕的例程。
将给定的乘积分解为素数似乎很容易,但是将素数列表划分为所需数量的因数让我很难过。(我冥想过 Knuth 的 TAOCP 第 4 卷的 Fascicle 3,但我还没有学会如何“理解”他的算法描述,所以我不知道他的集合分区算法是否会成为一个起点。理解 Knuth 的描述可能是另一个问题!)
我很高兴为公共域和拼图大小预先计算“乘法”字典,并将加载时间计入开销,但这种方法似乎不是一种有效的方法来处理,例如,一边拼图 100 个单元格,域大小为 2 到 50 个细胞。
oracle - 删除 Oracle 数据库上旧数据的技术
我们有一个成熟的 Oracle 数据库应用程序(已投入生产超过 10 年),在此期间,我们一直在使用自己设计的脚本来删除不再需要的旧数据。它们通过在频繁提交的循环中针对适当的表发出删除语句来工作,以避免系统因 i/o 过载或使用过多的撤消空间。
在大多数情况下,它们工作正常。它们每天运行,大约需要一个小时才能从系统中删除最旧日期的数据。我主要担心的是所有这些删除可能对表和索引产生的影响,以及即使它们不会过度加载系统,在短时间内删除一天的数据确实会产生影响实例缓冲区缓存,导致后续查询在接下来的几个小时内运行速度稍慢,因为缓存逐渐恢复。
多年来,我们一直在考虑更好的方法。过去,我听说人们使用分区表来管理旧数据的回收——例如,每个分区一个月,然后每月删除最旧的分区。这种方法的主要缺点是我们的收获规则超出了“删除 X 月”的范围。允许用户根据键值指定数据必须在系统中保留多长时间(例如,在发票表中,帐户 foo 可以在 3 个月后删除,但帐户栏可能需要保留 2 年)。
还有参照完整性的问题;Oracle 文档主要在数据仓库的上下文中讨论使用分区来清除数据,其中表往往是超立方体。我们的更接近于 OLTP,X 月的数据与 Y 月的数据有关联是很常见的。为这些表创建正确的分区键充其量是很麻烦的。
至于缓存井喷,我读过一些关于设置专用缓冲区缓存的内容,但似乎更多的是基于每个表,而不是基于每个用户或每个事务。为了保留缓存,我真的很希望收割工作在任何时候只将一个事务的数据保留在缓存中,因为一旦删除就不需要保留数据。
在可预见的未来,我们是否坚持使用删除,还是有其他更聪明的方法来处理收获?