- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我试图掌握数据库分区的不同概念,这就是我对它的理解:
Horizontal Partitioning/Sharding:将一个表拆分为不同的表,其中包含初始表中的行的子集(如果将 Users 表拆分为大陆,就像北美的子表,欧洲的另一个子表,等等......)。每个分区位于不同的物理位置(理解“机器”)。据我了解,水平分区和分片是完全相同的东西(?)。
垂直分区:据我了解(http://technet.microsoft.com/en-us/library/ms178148%28v=sql.105%29.aspx),有两种垂直分区:
规范化(包括通过拆分表并将它们与外键链接来从数据库中删除冗余)。
Row Splitting,这里是我不明白的地方,Normalization 和Row Splitting 有什么区别?这两种技术有何不同?
我还在这篇文章 (Difference between scaling horizontally and vertically for databases) 中读到,水平分区和垂直分区之间的区别在于,在第一个分区中,您通过添加更多机器来扩展,而在第二个分区中,您通过添加更多功率(CPU, RAM) 到您现有的机器,这是一个正确的定义吗?我认为这两种技术之间的核心区别在于拆分表格的方式。
很抱歉问了这么多问题,但我有点困惑,因为我遇到的很多不同的网站都说了不同的事情。
任何帮助澄清将不胜感激。任何指向带有几张表格的清晰简单演示的链接也会非常有帮助。
最佳答案
分区是一个相当笼统的概念,可以在许多情况下应用。当考虑关系数据的分区时,它通常指的是按行(水平)或按列(垂直)分解表。
垂直分区,又名行拆分,使用与数据库规范化相同的拆分技术,但术语(垂直/水平)数据分区通常指的是物理优化,而规范化是对< em>概念级别。
由于您要求进行简单演示 - 假设您有一个这样的表:
create table data (
id integer primary key,
status char(1) not null,
data1 varchar2(10) not null,
data2 varchar2(10) not null);
一种数据
垂直分区方法:按如下方式拆分:
create table data_main (
id integer primary key,
status char(1) not null,
data1 varchar2(10) not null );
create table data_rarely_used (
id integer primary key,
data2 varchar2(10) not null,
foreign key (id) references data_main (id) );
例如,当您在查询中很少需要列 data2 时,可以应用这种分区。分区 data_main 将占用更少的空间,因此全表扫描将更快,并且更有可能适合 DBMS 的页面缓存。缺点:当您必须查询 data
的所有列时,您显然必须连接表,这将比查询原始表更昂贵。
请注意,您拆分列的方式与规范化表格时的方式相同。然而,在这种情况下,data
可能已经规范化为 3NF(甚至 BCNF 和 4NF),但出于物理优化的原因,您决定进一步拆分它。
水平数据
分区的一种方法,使用 Oracle 语法:
create table data (
id integer primary key,
status char(1),
data1 varchar2(10),
data2 varchar2(10) )
partition by list (status) (
partition active_data values ( 'A' ),
partition other_data values(default)
);
这将告诉 DBMS 根据列 status
的值在内部将表 data
存储在两个段(就像两个表)中。这种分区 data
的方式可以应用,例如,当您通常只查询一个分区的行时,例如,状态“A”行(我们称它们为事件行)。和以前一样,全扫描会更快(特别是如果只有很少的事件行),事件行(和其他行)是连续存储的(它们不会分散在它们与不同行共享的页面周围状态值,并且事件行更有可能在页面缓存中。
关于数据库分区 - 水平与垂直 - 规范化和行拆分之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20388923/
我目前正在研究一个项目欧拉问题(www.projecteuler.net),但遇到了一个绊脚石。其中一个问题提供了一个 20x20 的数字网格,并要求直线上 4 个数字的最大乘积。这条线可以是水平的、
我有两个表,我需要从每个表中选择一列。 这必须在单个查询中完成。 好消息是这两列以正确的方式排序,并且它们都包含相同数量的行。 现在,我知道我可以通过 rowid 加入两个表,但它很慢,因为它必须进行
我想在我的 iPad 应用程序中实现一个布局,该布局具有一个可左右滚动而不是上下滚动的合适 View : 所以而不是 第 1 行第 2 行第 3 行(垂直滚动)这将是 :第 1 行、第 2 行、第 3
我有五个尺寸的图像:600x30、600x30、600x30、600x30、810x30。它们的名称分别是:0.png、1.png、2.png、3.png、4.png。 如何使用 ImageMagic
我正在寻找一个选项来滚动多个列表(水平),如附件中的图片所示。您可以向左或向右滑动以进入下一个 ListView 。顶部应该有一些按钮可以单击或滚动 我尝试将 ListViews 放入类似此代码的内容
这些值之间是否存在数学关系?如果我知道 hFOV 和 vFOV,我可以计算对角 FOV 而不涉及焦距等其他值吗? 我的第一个想法是使用毕达哥拉斯定理,但也许这是错误的。 最佳答案 感兴趣的物理量是传感
我正在尝试在 game_width=640 和 game_height=480 的窗口内绘制网格。网格单元的数量是预定义的。我想在水平和垂直方向上均匀分布单元格。 void GamePaint(HDC
你好,我已经发布了我的 iphone 应用程序 Micro-Pitch,现在正在将它移植到 android 上。我不知道如何在 ScrollView 中画线,想知道我做错了什么。 这是我的 Scrol
如果您访问我的网站:www.ryancoughlin.com - 如果您在页面右侧看到 Google、Yahoo 等 RSS 按钮。我试图让它们均匀对齐,它们的图像高度都相同,我一直试图让它们均匀对齐
我想将此 Material 水平居中: 最佳答案 将 text-align:center 添加到您的 anchor 。我假设您的 zoom1 具有 display
我正在努力做到这一点,以便我的旋转木马可以与其他文本共享一个水平行,但由于某种原因它无法正常工作,当它设置为 40% 时它占据了 100% 的宽度。 我将在下面发布代码和屏幕截图。 在上图中,它显示了
问题来了。我正在尝试放置一些 彼此相邻的元素。 div 的宽度s 未指定,取决于它们的内容。我正在使用下面的 CSS 代码来定位 彼此相邻: #div{ height: 50px; f
我正在尝试使用这样的 Bootstrap 并排打印表格 但是当我尝试打印预览时,我得到了这个 我的代码如下。我尝试了所有可能的解决方案,但我不知道为什么我无法打印我看到的页面。请指导我解决这个问题。
我想知道是否可以在背景中使用两种不同的颜色,并通过 Bootstrap 在每一侧扩展 100%。 这是我的意思的截图, 左侧为红色,右侧为深色,为更大的屏幕放大 100%。有什么简单的解决方案吗? 最
我正在尝试制作一个包含所有事件的滚动触发的整个网站。我只需要帮助来实现这种效果: 我有一个网站,其中包含一些填满所有视口(viewport)的 div,我希望用户能够向下滚动到一个命名的 div,然后
我的代码是 Show All Show Valid Show Pending Save Clear Download As CSV 我希望那些输入日期和按钮在 class="buttons" di
我在玩这个想法: 在这个 block 中我有 2 作为按钮和 并尝试了 float荷兰国际集团他们让他们粘在一起。实现这种效果的主要思想是操纵 ul 的宽度/显示状态。或者只是菜单部分。 Log
这个问题在这里已经有了答案: How can I horizontally center an element? (134 个回答) 关闭 4 年前。
我遇到了一个 CSS 问题,需要帮助。我在目录中有许多不同大小的图像,我正在动态列出它们以显示以下 View :(我仅显示两个图像作为示例) 这是我的 HTML:
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: How can I make a horizontal ListView in Android? 我已经多次使
我是一名优秀的程序员,十分优秀!