Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Greenplum³õ̽-Êý¾Ý¹þÏ£·Ö²¼Ó뼯ȺÀ©ÈÝ
 
×÷Õߣº ³ÌÐòÔ±ÖÂ֪¼
  3395  次浏览      31
2020-9-29
 
±à¼­ÍƼö:
±¾ÎĽéÉÜÁË Greenplum£¨GP£©·Ö²¼Ê½Êý¾Ý¿âµÄ¹þÏ£·Ö²¼²ßÂÔ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×Ô³ÌÐòÔ±ÖÂ֪¼£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

Greenplum£¨GP£©ÊÇ·Ö²¼Ê½Êý¾Ý¿â£¬Òò´Ë£¬Êý¾ÝµÄ·Ö²¼ÊÇ»ù´¡¡£GPÌṩÁ˶àÖÖ·Ö²¼²ßÂÔ£º¹þÏ£·Ö²¼¡¢Ëæ»ú·Ö²¼ºÍ¸´ÖÆ±í¡£ÆäÖУ¬×î³£ÓõľÍÊǹþÏ£·Ö²¼¡£±¾ÆªÎÄÕÂÎÒ½«Ïò´ó¼Ò½éÉÜGPµÄ¹þÏ£·Ö²¼¡£

Ê×ÏÈ£¬ÎÒÃÇÏȻعËÒ»ÏÂÉÏÆªÎÄÕÂÓÃÓÚµ÷ÊÔµÄÄÇÕÅ±í£º

CREATE table t1 AS SELECT g c1, g + 1 as c2 FROM generate_series(1, 10) g DISTRIBUTED BY (c1);

´ó¼Ò¿ÉÒÔ¿´µ½½¨±íÓï¾äĩβÓÐDISTRIBUTED BY (c1)£¬Õâ¾Í±íʾÉÏÃæÕâÕűíÊÇÒ»ÕŹþÏ£·Ö²¼±í£¬ÇÒͨ¹ýÁÐc1µÄֵɢÁÐÊý¾Ý¡£ÎÒÃÇÔÙÀ´¿´Ï±íÀïµÄÊý¾Ý£º

ÒòΪpsqlĬÈÏÁ¬½ÓµÄÊÇMaster£¬ËùÒÔÕâÀïÖ»ÄÜ¿´µ½ÕûÕűíµÄÊý¾Ý¡£Èç¹ûÎÒÃÇÏë¹Û²ìÊý¾ÝÔÚSegmentÖеķֲ¼Çé¿ö£¬ÄÇôÓÐûÓа취ֻ¿´Ä³¸öSegmentÖд洢µÄÊý¾ÝÄØ£¿´ð°¸ÊÇÓеġ£ÓÉÓÚSegmentÒ²ÊÇÒ»¸öPostgresQL£¨PG£©ÊµÀý£¬psqlÌṩÁËÒ»¸öutilityģʽ£¬¿ÉÒÔÖ±½ÓÁ¬½ÓSegment£¨×¢ÒⲻҪͨ¹ý´Ëģʽ£¬ÈƹýMaster£¬Ö±½ÓÔÚSegmentÖ´ÐÐDDL»òÊý¾Ý²åÈëÓï¾ä£¬ÕâÑù×ö¿ÉÄÜ»áÒý·¢¼¯ÈºÒì³££©¡£Ö´ÐÐÒÔÏÂÃüÁֱÁ¬Segment£º

PGOPTIONS='-c gp_session_role=utility' psql -p 6000 postgres

Á¬½ÓÉÏSegmentºó£¬Ôٴβ鿴SegmentÉÏt1±íµÄÊý¾Ý£º

ÓÉÓÚÎÒÃÇÉϴδµÄ»·¾³Ö»ÓÐһ̨Segment£¬±ít1µÄÊý¾ÝÀíËùµ±È»È«²¿´æ´¢ÔÚÕą̂SegmentÉÏ¡£ËùÒÔ£¬ÏÂÃæÎÒÃÇÐèÒª½«¼¯ÈºÀ©ÈÝ£¬ÔÙ½«t1µÄÊý¾ÝÖØ·Ö²¼£¬È»ºóÔٹ۲졣

À©ÈÝ

GPµÄ¹Ù·½ÎĵµÖУ¬ÓжÔÀ©ÈݵÄÏêϸ½éÉÜ£¬¾ßÌå¿ÉÒÔ²éÔÄ¡¶GPDB62Docs¡·¡ª¡ª Chapter 4 Greenplum Database Administrator Guide ¡ª¡ª Managing a Greenplum System ¡ª¡ª Expanding a Greenplum System¡£

1£¬³õʼ»¯ÐµÄSegments

cd /home/gpadmin/
#ÒÔ½»»¥Ä£Ê½´´½¨À©ÈÝÊäÈëÎļþ
gpexpand
# ÊÇ·ñ³õʼ»¯ÐµÄÀ©ÈÝ
> y
# ÊäÈëÐèÒªÀ©ÈݵÄÖ÷»úÃû£¬¶à¸öÖ÷»úÖ®¼äÒÔ¶ººÅ·Ö¸ô(ÈôÖ»ÔÚµ±Ç°ÒÑ´æÔÚÖ÷»úÔö¼Ósegments£¬ÊäÈë¿ÕÐм´¿É)
>
# ÊäÈëмÓÈëµÄprimary segmentsÊýÁ¿
> 1
# ÊäÈëÐÂprimary segmentsµÄĿ¼
> /home/data/primary

Íê³Éºó£¬»áÔÚµ±Ç°Ä¿Â¼Éú³ÉÒ»¸öinput file£¬gpexpand_inputfile_yyyymmdd_xxxx¡£

2£¬Ö´ÐÐÀ©ÈÝ

# À©ÈÝǰÐèҪȷ±£ÏµÍ³°²×°ÁËrsyncÃüÁûÓеϰÏÈyum -y install rsync
gpexpand -i input_file
# Èç¹ûÖ´ÐÐʧ°Ü£¬ÔÙ´ÎÖ´ÐÐǰÐè»Ø¹öÉÏ´Îʧ°ÜµÄÀ©ÈÝÐÅÏ¢
# gpexpand --rollback

²é¿´À©ÈÝ״̬£º

gpstate -x

3£¬Ö´ÐÐÊý¾ÝÖØ·Ö²¼

gpexpand -d 60:00:00

Ôٴβ鿴À©ÈÝ״̬£º

4£¬É¾³ý±¾´ÎÀ©ÈݵÄschemaÐÅÏ¢£º

gpexpand -c

ÎÒÃÇ¿´Ò»Ï´Ëʱºǫ́µÄ½ø³ÌÊý£º

¿ÉÒÔ¿´µ½ÐµÄSegmentÒÑÆô¶¯£¬ÖÁ´Ë£¬À©ÈÝÒÑÍê³É¡£

Êý¾Ý·Ö²¼

À©Èݺó£¬ÎÒÃÇ·Ö±ðÀûÓÃpsqlÁ¬½ÓÁ½¸öSegment£¬²é¿´Êý¾Ý·Ö²¼Çé¿ö¡£

µÚÒ»¸öSegment£º

µÚ¶þ¸öSegment£º

´ÓÉÏÃæÁ½ÕÅͼƬ¿ÉÒÔ¿´µ½£¬Ô­ÏÈÈ«²¿´æ´¢ÓÚµÚÒ»¸öSegmentÖеÄÊý¾Ý±»·ÖÉ¢µ½ÁËÁ½¸öSegmentÖУ¬²»¹ýÊý¾Ý±È½ÏÇãб£¨ÓÉÓÚt1±íµÄÊý¾ÝÁ¿±È½ÏÉÙ£¬µ±Ç°µÄÏÖÏó²¢²»ÄÜ˵Ã÷ʲôÎÊÌ⣩¡£

ͨ¹ýÔĶÁ¹Ù·½Îĵµ¡¶GPDB62Docs¡·¿ÉÖª£¬´Ó6.0°æ±¾¿ªÊ¼£¬GPʹÓÃÁËеĹþÏ£Ëã·¨¡ª¡ªJump Consistent Hash¡£ÕâÊǹȸèÌá³öµÄÒ»¸öÒ»ÖÂÐÔ¹þÏ£Ëã·¨£¬Ð§Âʺܸߡ£±¾ÎÄÔݲ»¶ÔÕâ¸öËã·¨Õ¹¿ªÌÖÂÛ£¬ÎÒÃÇÖ±½Ó´ÓÔ´ÂëÖÐÕÒµ½Õâ¸öËã·¨µÄ´úÂ룺

/*
* The following jump consistent hash algorithm is
* just the one from the original paper:
* https://arxiv.org/abs/1406.2294
*/
static inline int32


jump_consistent_hash(uint64 key, int32 num_segments)
{
int64 b = -1;
int64 j = 0;
while (j < num_segments)
{
b = j;
key = key * 2862933555777941757ULL + 1;
j = (b + 1) * ((double)(1LL << 31) / (double)((key >> 33) + 1));
}
return b;
}

¾Ý´Ë£¬ÎÒÃÇ¿ÉÒÔÑé֤һϣ¬ÉÏÃæµÄÊý¾ÝÊÇ·ñ°´ÕÕ´ËËã·¨·Ö²¼£º

Ö±½Óͨ¹ýÁÐc1µÄֵȥ¹þÏ££¬µÃµ½µÄ½á¹ûºÍt1±íʵ¼ÊµÄÊý¾Ý·Ö²¼ÊDz»Ò»Öµġ£Îª´Ë£¬ÎÒÃÇ¿ÉÒÔͨ¹ýµ÷ÊÔÔ´Â룬һ̽¾¿¾¹£¨µ÷ÊÔ·½·¨´ó¼Ò¿ÉÒԻعËÒ»ÏÂÉÏһƪÎÄÕ£©¡£Õâ´ÎÎÒÃÇÖ±½ÓÔÚjump_consistent_hash´¦´òÒ»¸ö¶Ïµã£¬Í¨¹ýpsqlÖ´ÐÐÒ»Ìõsql£º

insert into t1 values(1, 3);

³ÌÐòÖжϺó²é¿´´«Èëjump_consistent_hashµÄ±äÁ¿Öµ£º

¿ÉÒÔ·¢ÏÖ£¬´«Èëjump_consistent_hashµÄÈë²Î²¢²»ÊÇÎÒÃDzåÈëµÄc1µÄÖµ1£¬¶øÊDZä³ÉÁË2389907270£¬ºÜÃ÷ÏÔÕâÊÇÀàËÆ¹þÏ£ÖµµÄÒ»¸ö¶«¶«¡£¼ÌÐø¿´Ïµ±Ç°¶ÑÕ»£º

ÏòÉÏËÝÔ´ÕÒµ½nodeResult.c:279´¦µÄÔ´Â룬ÎÒÃÇ¿´ÏÂh->hashÊÇÈçºÎ²úÉúµÄ£º

ͼÖÐ1´¦£¬½«h->hashÖÃΪ0¡£Í¼2¸ù¾Ýc1µÄÖµÖØÐ¼ÆËãhashkey£¬²¢¸³¸øh->hash¡£¼ÌÐø²é¿´cdbhashµÄ´úÂ룺

ÔÚcdbhashÖпÉÒÔ¿´µ½£¬datum¼´Îªc1µÄÕæÊµÖµ1£¬Í¨¹ýFunctionCallInvoke(&fcinfo)²úÉúÁËеÄhkey£¬Í¨¹ýµ÷ÊÔ¿ÉÒÔ·¢ÏÖ£¬´Ë´¦µ÷Óõĺ¯Êý¼´hashint4£º

Datum hashint4(PG_FUNCTION_ARGS)
{
return hash_uint32(PG_GETARG_INT32(0));
}
Datum hash_uint32(uint32 k)
{
register uint32 a,
b,
c;
a = b = c = 0x9e3779b9 + (uint32) sizeof(uint32) + 3923095;
a += k;
final(a, b, c);
/* report the result */
return UInt32GetDatum(c);
}

¿´µ½ÕâÀï£¬ÕæÏà´ó°×¡£Ô­À´ÊǸù¾ÝÁеÄÀàÐ͵÷ÓÃÏàÓ¦µÄhashº¯Êý£¬ÏȶÔÁÐÖµ¼ÆËãÁËÒ»´ÎhashÖµ£¬È»ºóÔٶԴ˹þÏ£Öµ½øÐÐjump¹þÏ£ÕÒµ½¶ÔÓ¦µÄsegment±àºÅ¡£Èç´ËÒ»À´£¬ÎÒÃÇÔÚ²âÊÔ´úÂëÖÐÌí¼Óhash_uint32£¬¼ÌÐøÑéÖ¤£º

¿ÉÒÔ¿´µ½£¬Õâ´ÎµÄÑéÖ¤½á¹ûÓëʵ¼ÊµÄÊý¾Ý·Ö²¼½á¹ûÊÇÒ»Öµġ£ÖÁ´Ë£¬GPµÄ¹þÏ£·Ö²¼²ßÂÔ½éÉÜÍê±Ï¡£

 

   
3395 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢ 6-12[ÏÃÃÅ]
È˹¤ÖÇÄÜ.»úÆ÷ѧϰTensorFlow 6-22[Ö±²¥]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 6-30[±±¾©]
ǶÈëʽÈí¼þ¼Ü¹¹-¸ß¼¶Êµ¼ù 7-9[±±¾©]
Óû§ÌåÑé¡¢Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À 7-25[Î÷°²]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 8-23[±±¾©]
 
×îÐÂÎÄÕÂ
InfluxDB¸ÅÄîºÍ»ù±¾²Ù×÷
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾ÝдÈë
Éî¶ÈÂþ̸Êý¾Ýϵͳ¼Ü¹¹¡ª¡ªLambda architecture
Lambda¼Ü¹¹Êµ¼ù
InfluxDB TSM´æ´¢ÒýÇæÖ®Êý¾Ý¶ÁÈ¡
×îпγÌ
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯¡¢¼Ü¹¹Éè¼ÆºÍÔËÐÐά»¤
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
NoSQLÊý¾Ý¿â£¨Ô­Àí¡¢Ó¦Óá¢×î¼Ñʵ¼ù£©
ÆóÒµ¼¶Hadoop´óÊý¾Ý´¦Àí×î¼Ñʵ¼ù
OracleÊý¾Ý¿âÐÔÄÜÓÅ»¯×î¼Ñʵ¼ù
³É¹¦°¸Àý
ij½ðÈÚ¹«Ë¾ Mysql¼¯ÈºÓëÐÔÄÜÓÅ»¯
±±¾© ²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
ÖªÃûijÐÅϢͨÐŹ«Ë¾ NoSQL»º´æÊý¾Ý¿â¼¼Êõ
±±¾© oracleÊý¾Ý¿âSQLÓÅ»¯
ÖйúÒÆ¶¯ IaaSÔÆÆ½Ì¨-Ö÷Á÷Êý¾Ý¿â¼°´æ´¢¼¼Êõ