zoukankan      html  css  js  c++  java
  • LINEAR HASH Partitioning

    MySQL :: MySQL 8.0 Reference Manual :: 23.2.4.1 LINEAR HASH Partitioning https://dev.mysql.com/doc/refman/8.0/en/partitioning-linear-hash.html

    MySQL 8.0 Reference Manual  /  ...  /  LINEAR HASH Partitioning

    23.2.4.1 LINEAR HASH Partitioning

    MySQL also supports linear hashing, which differs from regular hashing in that linear hashing utilizes a linear powers-of-two algorithm whereas regular hashing employs the modulus of the hashing function's value.

    Syntactically, the only difference between linear-hash partitioning and regular hashing is the addition of the LINEAR keyword in the PARTITION BY clause, as shown here:

    CREATE TABLE employees (
        id INT NOT NULL,
        fname VARCHAR(30),
        lname VARCHAR(30),
        hired DATE NOT NULL DEFAULT '1970-01-01',
        separated DATE NOT NULL DEFAULT '9999-12-31',
        job_code INT,
        store_id INT
    )
    PARTITION BY LINEAR HASH( YEAR(hired) )
    PARTITIONS 4;

    Given an expression expr, the partition in which the record is stored when linear hashing is used is partition number N from among num partitions, where N is derived according to the following algorithm:

    1. Find the next power of 2 greater than num. We call this value V; it can be calculated as:

      V = POWER(2, CEILING(LOG(2, num)))

      (Suppose that num is 13. Then LOG(2,13) is 3.7004397181411. CEILING(3.7004397181411) is 4, and V = POWER(2,4), which is 16.)

    2. Set N = F(column_list) & (V - 1).

    3. While N >= num:

      • Set V = V / 2

      • Set N = N & (V - 1)

    Suppose that the table t1, using linear hash partitioning and having 6 partitions, is created using this statement:

    CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATE)
        PARTITION BY LINEAR HASH( YEAR(col3) )
        PARTITIONS 6;

    Now assume that you want to insert two records into t1 having the col3 column values '2003-04-14' and '1998-10-19'. The partition number for the first of these is determined as follows:

    V = POWER(2, CEILING( LOG(2,6) )) = 8
    N = YEAR('2003-04-14') & (8 - 1)
       = 2003 & 7
       = 3
    
    (3 >= 6 is FALSE: record stored in partition #3)

    The number of the partition where the second record is stored is calculated as shown here:

    V = 8
    N = YEAR('1998-10-19') & (8 - 1)
      = 1998 & 7
      = 6
    
    (6 >= 6 is TRUE: additional step required)
    
    N = 6 & ((8 / 2) - 1)
      = 6 & 3
      = 2
    
    (2 >= 6 is FALSE: record stored in partition #2)

    The advantage in partitioning by linear hash is that the adding, dropping, merging, and splitting of partitions is made much faster, which can be beneficial when dealing with tables containing extremely large amounts (terabytes) of data. The disadvantage is that data is less likely to be evenly distributed between partitions as compared with the distribution obtained using regular hash partitioning.

     PREV   HOME   UP   
     
    二阶线性散列分区


    V = POWER(2, CEILING(LOG(2, num)))

    Set N = F(column_list) & (V - 1).

    While N >= num:

    Set V = V / 2

    Set N = N & (V - 1)

     
     
     
  • 相关阅读:
    信息安全大赛出的题目
    RedHat6 —— 配置IP地址
    PHP环境下配置WebGrind——让你的网站性能看得见
    PHP实例——验证邮件的主机是否存在
    Linux ——记一记那恐怖的 rm f
    这大半天就耗在一个jQuery跨域Json上了——jQuery跨域获取json数据总结
    常用的Mysql数据库操作语句大全
    ZOJ 3209 Treasure Map
    HDU 3452 Bonsai
    HDU 2577 How to Type
  • 原文地址:https://www.cnblogs.com/rsapaper/p/10107605.html
Copyright © 2011-2022 走看看