MPP DB的缺点

1、 扩展性:
为什么 MPP DB 扩展性不好?
MPP DB 还是基于原 DB 扩展而来, DB 里面天然追求一致性( Consistency ),必然带来分区容错性较差。集群规模变得太大,业务数据太多时, MPP DB 的元数据管理就完全是一个灾难。元数据巨大无比,一旦出错很难恢复,动不动导致毁库。
所以 MPP DB 要在扩展性上有质的提示,要对元数据,以及数据存储有架构上的突破,降低对一致性的要求,这样扩展性才能提升,否则的话很难相信一个 MPP DB 数据库是可以容易扩展的。
这和 hadoop 动不动 4,5 千个节点一个节点集群简直不在一个数量级上。

2、 并发的支持:
一个查询系统,设计出来就是提供人用的,所以能支持的同时并发越高越好。MPP DB 核心原理是一 个大的查询通过分析为一一个子查询,分布到底层的执行,最后再合并结果,说白了就是通过多线程并发来暴力 SCAN 来实现高速。 这种暴力SCAN的方法,对单个查询来说,动用了整个系统的能力,单个查询比较快,但同时带来用力过猛的问题,整个系统能支持的并发必然不高,从目前实际使用的经验来说,也就支持50~100的并发能力。
当前HBASE/IMPALA应对复杂查询时,也是通过全盘SCAN的方法来实现的,这种场景下,硬盘数量越多越好,转速越快越好。HBASE为什么号称支持上千并发,这也是在特定的场景下(查询时带用户标示,即带row key)才能实现的,复杂查询场景下,什么系统都歇菜。
所以MPP DB应用场景已经非常明显了,适合小集群(100以内),低并发的(50左右)的场景。MPP DB未来是不是趋势,我不知道,但是至少目前来看,用MPP DB来应对大数据的实时分析系统是非常吃力的。

MPP相较Hadoop类系统要差,依赖于定制硬件,而且没有可靠的开源实现。

<think>我们正在讨论Greenplum数据库(GP)中如何单独存放新业务数据。根据用户的问题,主要关注三种方法:创建模式、创建数据库、创建用户。结合之前的回答和引用内容,我们可以这样组织:引用[1]和[3]说明了Greenplum的分布式特性(MPP架构)和基于PostgreSQL的关系型数据库特点。引用[2]虽然提到了PostGIS扩展,但与本问题关系不大,可以忽略。在Greenplum中,为了隔离新业务数据,通常有几种层次:1.创建单独的数据库(Database)-最高级别的隔离,不同数据库之间数据完全独立,无法直接跨库查询。2.创建单独的模式(Schema)-在同一个数据库内进行逻辑隔离,可以通过schema.table的方式跨模式访问。3.创建单独的用户(User)-配合权限管理,控制用户对特定模式或数据库的访问。下面详细说明每种方法:###一、创建新数据库(最高隔离级别)**适用场景**:当新业务数据与现有业务完全独立,不需要跨业务关联查询时。**操作步骤**:1.使用超级用户(如gpadmin)连接数据库2.执行创建数据库命令:```sqlCREATEDATABASEnew_business_db;```3.授权给特定用户(可选):```sqlGRANTALLPRIVILEGESONDATABASEnew_business_dbTOnew_user;```**优点**:完全独立的物理存储(不同数据库位于不同的文件系统目录),资源可独立配置。**缺点**:跨数据库查询需要额外工具(如dblink)或应用程序层处理,性能较差。###二、创建新模式(逻辑隔离)**适用场景**:同一数据库内需要逻辑隔离多个业务,但偶尔需要跨业务关联查询。**操作步骤**:1.在目标数据库中创建模式(假设当前数据库为main_db):```sql--切换到目标数据库(若使用psql,可用\cmain_db)CREATESCHEMAnew_business_schema;```2.设置模式所有者(可选):```sqlALTERSCHEMAnew_business_schemaOWNERTOnew_user;```3.授权用户访问该模式:```sqlGRANTUSAGEONSCHEMAnew_business_schemaTOnew_user;--授予表操作权限GRANTSELECT,INSERT,UPDATE,DELETEONALLTABLESINSCHEMAnew_business_schemaTOnew_user;```**优点**:-在同一数据库内,可直接跨模式查询(`SELECT*FROMschema1.table1,schema2.table2`)-管理方便,备份恢复可统一处理**缺点**:所有模式共享同一数据库资源(如连接数、后台进程)###三、创建新用户(权限隔离)**适用场景**:配合数据库或模式使用,实现权限层面的隔离。**操作步骤**:1.创建用户并设置密码:```sqlCREATEUSERnew_userWITHPASSWORD'password123';```2.将新业务的数据对象(数据库或模式)授权给该用户:-若创建了新数据库:```sqlGRANTCONNECTONDATABASEnew_business_dbTOnew_user;```-若创建了新模式:```sqlGRANTUSAGEONSCHEMAnew_business_schemaTOnew_user;GRANTSELECTONALLTABLESINSCHEMAnew_business_schemaTOnew_user;--根据实际需求授权```**注意**:用户本身不存储数据,而是通过权限控制访问已有数据库对象。###四、组合使用建议对于新业务数据隔离,推荐组合策略:1.**中等隔离需求**:创建新用户+新数据库```sqlCREATEUSERnew_userPASSWORD'pass123';CREATEDATABASEnew_dbOWNERnew_user;```这样新用户将拥有新数据库的全部权限,且与原有业务数据库物理隔离。2.**轻度隔离需求**:创建新用户+新模式```sqlCREATEUSERnew_userPASSWORD'pass123';CREATESCHEMAnew_schemaAUTHORIZATIONnew_user;```然后在该模式下创建表,用户只能访问该模式下的数据(除非额外授权)。###五、验证方法1.查看数据库列表:```sql\l--psql命令SELECTdatnameFROMpg_database;--SQL查询```2.查看模式列表:```sql\dn--psql命令SELECTschema_nameFROMinformation_schema.schemata;--SQL查询```3.查看用户权限:```sql\dp--显示当前数据库的权限\z--显示表、视图、序列的权限```###注意事项1.**资源管理**:在Greenplum中,可通过资源队列(v5之前)或资源组(v5+)限制用户/角色的资源使用[^1]。例如:```sql--创建资源组CREATERESOURCEGROUPnew_biz_groupWITH(CONCURRENCY=10,CPU_RATE_LIMIT=30,MEMORY_LIMIT=30);--将用户关联到资源组ALTERROLEnew_userRESOURCEGROUPnew_biz_group;```2.**跨模式查询**:在同一个数据库内,直接使用`schema.table`访问;跨数据库需使用dblink扩展(需安装):```sqlSELECT*FROMdblink('dbname=new_business_db','SELECT*FROMtable1')ASt1(idint);```3.**存储优化**:Greenplum支持表级存储策略(行存/列存、压缩、分区等),可在创建表时指定[^3]:```sqlCREATETABLEnew_schema.sales(idint,datedate,amountfloat)WITH(appendonly=true,orientation=column)DISTRIBUTEDBY(id)PARTITIONBYRANGE(date);```>以上操作均需超级用户权限,或在对应数据库/模式上拥有创建权限。§§相关问题§§1.如何监控Greenplum中各数据库的资源使用情况?2.使用dblink进行跨数据库查询的性能优化方法有哪些?3.Greenplum中如何实现表级存储策略的动态调整?</think>### Greenplum数据库单独存放新业务数据的实现方法 在Greenplum中,可通过以下三种方式实现新业务数据的隔离存储(按隔离强度排序): #### 一、创建新数据库(最高隔离级别) **适用场景**:需要完全物理隔离的业务系统(如金融/医疗等敏感数据) ```sql -- 创建新数据库 CREATE DATABASE new_business_db WITH OWNER = admin_user; -- 授权给业务用户 GRANT ALL PRIVILEGES ON DATABASE new_business_db TO biz_user; ``` **特点**: - 独立存储目录和事务日志[^1] - 跨库查询需通过`dblink`扩展实现 - 资源可独立配置(连接数/内存配额) #### 二、创建新模式(最佳实践) **适用场景**:同一业务系统内的模块隔离(推荐方案) ```sql -- 创建专属模式 CREATE SCHEMA new_biz_schema AUTHORIZATION biz_user; -- 设置访问权限 GRANT USAGE ON SCHEMA new_biz_schema TO analyst_role; GRANT CREATE ON SCHEMA new_biz_schema TO dev_user; ``` **特点**: - 逻辑隔离但共享数据库资源 - 支持跨模式直接查询(`SELECT * FROM schema1.table JOIN schema2.table`) - 可独立设置存储策略: ```sql CREATE TABLE new_biz_schema.sales_data ( id BIGSERIAL PRIMARY KEY, data JSONB ) WITH (appendonly=true, orientation=column); -- 列式存储优化[^3] ``` #### 三、创建新用户(权限隔离) **适用场景**:基于角色的数据访问控制 ```sql -- 创建业务专属用户 CREATE USER biz_user WITH PASSWORD 'secure123' RESOURCE GROUP new_biz_group; -- 资源隔离[^1] -- 绑定对象权限 ALTER SCHEMA existing_schema OWNER TO biz_user; ``` **特点**: - 通过角色控制数据访问边界 - 可结合资源组限制CPU/内存用量: ```sql CREATE RESOURCE GROUP new_biz_group WITH (CONCURRENCY=15, CPU_RATE_LIMIT=40); -- 最大并发15,CPU限制40% ``` --- ### 方案对比表 | 方法 | 隔离级别 | 跨单元访问 | 资源隔离 | 适用场景 | |--------------|----------|------------------|----------|------------------------| | 新建数据库 | 物理隔离 | 需dblink扩展 | ★★★★ | 独立业务系统 | | 新建模式 | 逻辑隔离 | 直接访问 | ★★ | 业务模块隔离(推荐) | | 新建用户 | 权限隔离 | 依赖授权 | ★★★ | 多租户/权限控制 | --- ### 实施建议 1. **存储优化** 对新业务表启用列式存储和压缩: ```sql CREATE TABLE new_biz_schema.event_logs ( event_time TIMESTAMP, user_id INT, action TEXT ) WITH (appendonly=true, compresstype=zstd); ``` 2. **数据分布策略** 根据业务特征选择分布键: ```sql -- 按日期分布(时间序列数据) CREATE TABLE sensor_data (...) DISTRIBUTED BY (log_date); -- 随机分布(避免数据倾斜) CREATE TABLE api_logs (...) DISTRIBUTED RANDOMLY; ``` 3. **跨模式访问** 在统一数据库中直接引用: ```sql SELECT a.*, b.* FROM core_schema.users AS a JOIN new_biz_schema.orders AS b ON a.id = b.user_id; ``` > **操作注意**:所有DDL操作需通过Master节点执行,系统自动同步到Segment节点[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值