1M 行,1 table,几列 vs 300 tables,3000 行,几列 vs 300 列,3000 行,1 table?
1M rows, 1 table, few columns vs 300 tables, 3000 rows, few columns vs 300 columns, 3000 rows, 1 table?
我曾尝试四处寻找解决此问题的最佳方法,但找不到此类问题的任何先前示例。
我正在建设一个基于超本地化的互联网购物中心,该区域分为大约 3000 个区域。每个区域包含大约 300 个项目。它们是相似的项目,但每个区域可能略有不同。我需要获取每个区域的 "available items" 列表。
插入速度不是问题,主要是根据"zone"的值获取条目。为此类实例设置数据库的最有效方法是什么?
1 table 具有 1M 行,例如
编号 |专区 |项目 |有用
1 | 1 | 1 | Y
2 | 1 | 2 | N
...
1262| 4 | 35 | Y
300 tables 3000 行如
table: zone1
编号 |项目 |有用
1 | 1 | Y
2 | 2 | N
table: zone4
编号 |项目 |有用
...
35 | 35 | Y
1 table 有 300 列(每一项),3000 行
编号 |专区 |项目 1 |项目 2 ...
1 | 1 |是 | N ...
...
4 | 4 |是 | Y ...
在此先感谢您提供的任何帮助或任何线索,以便我做出决定!
基于意见的限制,但我们开始了;
选项 1 很可能是您想要的。
选项 2 会给你 300 tables 来维护,所以如果你以后需要添加一个字段,你有 300 tables 来改变这听起来像是可维护性恶梦。此外,300 个索引很可能比一个更大的索引缓存更差,并且在所有区域中搜索特定项目基本上是不可能的。
选项 3 需要您更改 table 结构和查询以添加 300 多个项目。此外,为了能够通过 id 找到一个项目,你需要 SQL 看起来像 SELECT xx FROM yy WHERE item1=57 OR item2=57 OR ... OR item300=57
,MySQL 的优化器很可能会放弃。
从关系数据库的角度来看,您应该选择第一个选项。
- 如果有一天你必须添加一个新的项目或一个新的区域,你将不必创建一个新的列或一个新的table,如果你需要删除一个item/zone。
但是从 NoSQL 的角度来看,您应该选择 tables 就像选项 2。
只需使用第一个选项。 1M 行,1 table,几列 .
第一个选项是最好的。 DBMS 每 table 和每行都会产生很大的开销。另外,它们不是为许多 table 和许多行的情况而设计的。
我曾尝试四处寻找解决此问题的最佳方法,但找不到此类问题的任何先前示例。
我正在建设一个基于超本地化的互联网购物中心,该区域分为大约 3000 个区域。每个区域包含大约 300 个项目。它们是相似的项目,但每个区域可能略有不同。我需要获取每个区域的 "available items" 列表。
插入速度不是问题,主要是根据"zone"的值获取条目。为此类实例设置数据库的最有效方法是什么?
1 table 具有 1M 行,例如
编号 |专区 |项目 |有用
1 | 1 | 1 | Y
2 | 1 | 2 | N
...
1262| 4 | 35 | Y300 tables 3000 行如
table: zone1
编号 |项目 |有用
1 | 1 | Y
2 | 2 | Ntable: zone4
编号 |项目 |有用
...
35 | 35 | Y1 table 有 300 列(每一项),3000 行
编号 |专区 |项目 1 |项目 2 ...
1 | 1 |是 | N ...
...
4 | 4 |是 | Y ...
在此先感谢您提供的任何帮助或任何线索,以便我做出决定!
基于意见的限制,但我们开始了;
选项 1 很可能是您想要的。
选项 2 会给你 300 tables 来维护,所以如果你以后需要添加一个字段,你有 300 tables 来改变这听起来像是可维护性恶梦。此外,300 个索引很可能比一个更大的索引缓存更差,并且在所有区域中搜索特定项目基本上是不可能的。
选项 3 需要您更改 table 结构和查询以添加 300 多个项目。此外,为了能够通过 id 找到一个项目,你需要 SQL 看起来像
SELECT xx FROM yy WHERE item1=57 OR item2=57 OR ... OR item300=57
,MySQL 的优化器很可能会放弃。
从关系数据库的角度来看,您应该选择第一个选项。 - 如果有一天你必须添加一个新的项目或一个新的区域,你将不必创建一个新的列或一个新的table,如果你需要删除一个item/zone。
但是从 NoSQL 的角度来看,您应该选择 tables 就像选项 2。
只需使用第一个选项。 1M 行,1 table,几列 .
第一个选项是最好的。 DBMS 每 table 和每行都会产生很大的开销。另外,它们不是为许多 table 和许多行的情况而设计的。