ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd

ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd

ืคืจื”ื™ืกื˜ื•ืจื™ื”

ื›ืš ืงืจื” ืฉื”ืฉืจืช ื”ื•ืชืงืฃ ืขืœ ื™ื“ื™ ื•ื™ืจื•ืก ื›ื•ืคืจ, ืืฉืจ, ื‘"ืชืื•ื ื” ืžื–ืœ", ื”ืฉืื™ืจ ื—ืœืงื™ืช ืืช ืงื‘ืฆื™ ื”-.ibd (ืงื‘ืฆื™ ื ืชื•ื ื™ื ื’ื•ืœืžื™ื™ื ืฉืœ ื˜ื‘ืœืื•ืช innodb), ืืš ื‘ืžืงื‘ื™ืœ ื”ืฆืคื™ืŸ ืœื—ืœื•ื˜ื™ืŸ ืืช ืงื‘ืฆื™ ื”-.fpm ( ืงื‘ืฆื™ ืžื‘ื ื”). ื‘ืžืงืจื” ื–ื”, ื ื™ืชืŸ ืœื—ืœืง ืืช .idb ืœ:

  • ื›ืคื•ืฃ ืœืฉื—ื–ื•ืจ ื‘ืืžืฆืขื•ืช ื›ืœื™ื ื•ืžื“ืจื™ื›ื™ื ืกื˜ื ื“ืจื˜ื™ื™ื. ืœืžืงืจื™ื ื›ืืœื”, ื™ืฉ ืžืฆื•ื™ืŸ ื”ืคื›ื•;
  • ื˜ื‘ืœืื•ืช ืžื•ืฆืคื ื•ืช ื—ืœืงื™ืช. ืœืจื•ื‘ ืžื“ื•ื‘ืจ ื‘ื˜ื‘ืœืื•ืช ื’ื“ื•ืœื•ืช, ืฉืขื‘ื•ืจืŸ (ื›ืคื™ ืฉื”ื‘ื ืชื™) ืœื ื”ื™ื” ืœืชื•ืงืคื™ื ืžืกืคื™ืง ื–ื™ื›ืจื•ืŸ RAM ืœื”ืฆืคื ื” ืžืœืื”;
  • ื•ื‘ื›ืŸ, ื˜ื‘ืœืื•ืช ืžื•ืฆืคื ื•ืช ืœื—ืœื•ื˜ื™ืŸ ืฉืœื ื ื™ืชืŸ ืœืฉื—ื–ืจ.

ื ื™ืชืŸ ื”ื™ื” ืœืงื‘ื•ืข ืœืื™ื–ื• ืืคืฉืจื•ืช ืฉื™ื™ื›ื™ื ื”ื˜ื‘ืœืื•ืช ืคืฉื•ื˜ ืขืœ ื™ื“ื™ ืคืชื™ื—ืชื” ื‘ื›ืœ ืขื•ืจืš ื˜ืงืกื˜ ื‘ืงื™ื“ื•ื“ ื”ืจืฆื•ื™ (ื‘ืžืงืจื” ืฉืœื™ ื–ื” UTF8) ื•ืคืฉื•ื˜ ืœืฆืคื•ืช ื‘ืงื•ื‘ืฅ ืขืœ ื ื•ื›ื—ื•ืชื ืฉืœ ืฉื“ื•ืช ื˜ืงืกื˜, ืœืžืฉืœ:

ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd

ื›ืžื• ื›ืŸ, ื‘ืชื—ื™ืœืช ื”ืงื•ื‘ืฅ ื ื™ืชืŸ ืœืฆืคื•ืช ื‘ืžืกืคืจ ืจื‘ ืฉืœ 0 ื‘ืชื™ื, ื•ื™ืจื•ืกื™ื ื”ืžืฉืชืžืฉื™ื ื‘ืืœื’ื•ืจื™ืชื ื”ื”ืฆืคื ื” ื”ื—ืกื™ืžื” (ื”ื ืคื•ืฅ ื‘ื™ื•ืชืจ) ืžืฉืคื™ืขื™ื ื‘ื“ืจืš ื›ืœืœ ื’ื ืขืœื™ื”ื.
ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd

ื‘ืžืงืจื” ืฉืœื™, ื”ืชื•ืงืคื™ื ื”ืฉืื™ืจื• ืžื—ืจื•ื–ืช ืฉืœ 4 ื‘ืชื™ื (1, 0, 0, 0) ื‘ืกื•ืฃ ื›ืœ ืงื•ื‘ืฅ ืžื•ืฆืคืŸ, ืžื” ืฉืคืฉื˜ ืืช ื”ืžืฉื™ืžื”. ื›ื“ื™ ืœื—ืคืฉ ืงื‘ืฆื™ื ืœื ื ื’ื•ืขื™ื, ื”ืกืงืจื™ืคื˜ ื”ืกืคื™ืง:

def opened(path):
    files = os.listdir(path)
    for f in files:
        if os.path.isfile(path + f):
            yield path + f

for full_path in opened("C:somepath"):
    file = open(full_path, "rb")
    last_string = ""
    for line in file:
        last_string = line
        file.close()
    if (last_string[len(last_string) -4:len(last_string)]) != (1, 0, 0, 0):
        print(full_path)

ื›ืš, ื”ืชื‘ืจืจ ืœืžืฆื•ื ืงื‘ืฆื™ื ื”ืฉื™ื™ื›ื™ื ืœืกื•ื’ ื”ืจืืฉื•ืŸ. ื”ืฉื ื™ ื›ืจื•ืš ื‘ื”ืจื‘ื” ืขื‘ื•ื“ื” ื™ื“ื ื™ืช, ืื‘ืœ ืžื” ืฉื ืžืฆื ื›ื‘ืจ ื”ืกืคื™ืง. ื”ื›ืœ ื™ื”ื™ื” ื‘ืกื“ืจ, ืื‘ืœ ืืชื” ืฆืจื™ืš ืœื“ืขืช ืžื‘ื ื” ืžื“ื•ื™ืง ืœื—ืœื•ื˜ื™ืŸ ื•(ื›ืžื•ื‘ืŸ) ืขืœื” ืžืงืจื” ืฉื ืืœืฆืชื™ ืœืขื‘ื•ื“ ืขื ืฉื•ืœื—ืŸ ืžืชื—ืœืฃ ืชื“ื™ืจ. ืื™ืฉ ืœื ื–ื›ืจ ืื ืกื•ื’ ื”ืฉื“ื” ืฉื•ื ื” ืื• ื ื•ืกืคื” ืขืžื•ื“ื” ื—ื“ืฉื”.

Wilds City, ืœืžืจื‘ื” ื”ืฆืขืจ, ืœื ื™ื›ืœื” ืœืขื–ื•ืจ ื‘ืžืงืจื” ื›ื–ื”, ื•ืœื›ืŸ ืžืืžืจ ื–ื” ื ื›ืชื‘.

ืงืจื•ื‘ ื™ื•ืชืจ ืœืขื ื™ื™ืŸ

ื™ืฉ ืžื‘ื ื” ืฉืœ ื˜ื‘ืœื” ืžืœืคื ื™ 3 ื—ื•ื“ืฉื™ื ืฉืื™ื ื• ืชื•ืื ืืช ื”ื ื•ื›ื—ื™ืช (ืืคืฉืจ ืฉื“ื” ืื—ื“, ื•ืื•ืœื™ ื™ื•ืชืจ). ืžื‘ื ื” ื”ื˜ื‘ืœื”:

CREATE TABLE `table_1` (
    `id` INT (11),
    `date` DATETIME ,
    `description` TEXT ,
    `id_point` INT (11),
    `id_user` INT (11),
    `date_start` DATETIME ,
    `date_finish` DATETIME ,
    `photo` INT (1),
    `id_client` INT (11),
    `status` INT (1),
    `lead__time` TIME ,
    `sendstatus` TINYINT (4)
); 

ื‘ืžืงืจื” ื–ื”, ืขืœื™ืš ืœื—ืœืฅ:

  • id_point int(11);
  • id_user int(11);
  • date_start ืชืืจื™ืš ืฉืขื”;
  • date_finish ืชืืจื™ืš ืฉืขื”.

ืœืฆื•ืจืš ืฉื—ื–ื•ืจ, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ื”-.ibd, ื•ืœืื—ืจ ืžื›ืŸ ื”ืžืจืชื ืœืฆื•ืจื” ืงืจื™ื ื™ื•ืชืจ. ืžื›ื™ื•ื•ืŸ ืฉื›ื“ื™ ืœืžืฆื•ื ืืช ืžื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืจืง ืœื ืชื— ืกื•ื’ื™ ื ืชื•ื ื™ื ื›ืžื• int ื•-datatime, ื”ืžืืžืจ ื™ืชืืจ ืจืง ืื•ืชื, ืื‘ืœ ืœืคืขืžื™ื ื ืชื™ื™ื—ืก ื’ื ืœืกื•ื’ื™ ื ืชื•ื ื™ื ืื—ืจื™ื, ืฉื™ื›ื•ืœื™ื ืœืขื–ื•ืจ ื‘ืชืงืจื™ื•ืช ื“ื•ืžื•ืช ืื—ืจื•ืช.

ื‘ืขื™ื” 1: ืœืฉื“ื•ืช ืขื ื”ืกื•ื’ื™ื DATETIME ื•-TEXT ื”ื™ื• ืขืจื›ื™ NULL, ื•ื”ื ืคืฉื•ื˜ ืžื“ืœื’ื™ื ื‘ืงื•ื‘ืฅ, ื‘ื’ืœืœ ื–ื”, ืœื ื ื™ืชืŸ ื”ื™ื” ืœืงื‘ื•ืข ืืช ื”ืžื‘ื ื” ืœืฉื—ื–ื•ืจ ื‘ืžืงืจื” ืฉืœื™. ื‘ืขืžื•ื“ื•ืช ื”ื—ื“ืฉื•ืช, ืขืจืš ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื” null, ื•ื—ืœืง ืžื”ืขืกืงื” ืขืœื•ืœ ืœืœื›ืช ืœืื™ื‘ื•ื“ ืขืงื‘ ื”ื”ื’ื“ืจื” innodb_flush_log_at_trx_commit = 0, ื›ืš ืฉื™ื”ื™ื” ืฆื•ืจืš ืœื”ืฉืงื™ืข ื–ืžืŸ ื ื•ืกืฃ ื›ื“ื™ ืœืงื‘ื•ืข ืืช ื”ืžื‘ื ื”.

ื‘ืขื™ื” 2: ื™ืฉ ืœืงื—ืช ื‘ื—ืฉื‘ื•ืŸ ืฉืฉื•ืจื•ืช ืฉื ืžื—ืงื• ื“ืจืš DELETE ื™ื”ื™ื• ื›ื•ืœืŸ ื‘ืงื•ื‘ืฅ ibd, ืื‘ืœ ืขื ALTER TABLE ื”ืžื‘ื ื” ืฉืœื”ืŸ ืœื ื™ืชืขื“ื›ืŸ. ื›ืชื•ืฆืื” ืžื›ืš, ืžื‘ื ื” ื”ื ืชื•ื ื™ื ื™ื›ื•ืœ ืœื”ืฉืชื ื•ืช ืžืชื—ื™ืœืช ื”ืงื•ื‘ืฅ ื•ืขื“ ืกื•ืคื•. ืื ืืชื” ืžืฉืชืžืฉ ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘- OPTIMIZE TABLE, ืœื ืกื‘ื™ืจ ืฉืชืชืงืœ ื‘ื‘ืขื™ื” ื›ื–ื•.

ืฉื™ื ืœื‘, ื’ืจืกืช DBMS ืžืฉืคื™ืขื” ืขืœ ื”ืื•ืคืŸ ืฉื‘ื• ื ืชื•ื ื™ื ืžืื•ื—ืกื ื™ื, ื•ื™ื™ืชื›ืŸ ืฉื“ื•ื’ืžื” ื–ื• ืœื ืชืขื‘ื•ื“ ืขื‘ื•ืจ ื’ืจืกืื•ืช ืขื™ืงืจื™ื•ืช ืื—ืจื•ืช. ื‘ืžืงืจื” ืฉืœื™, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ื’ืจืกืช Windows ืฉืœ mariadb 10.1.24. ื›ืžื• ื›ืŸ, ืœืžืจื•ืช ืฉื‘-mariadb ืืชื” ืขื•ื‘ื“ ืขื ื˜ื‘ืœืื•ืช InnoDB, ืœืžืขืฉื” ื”ื ื›ืŸ XtraDB, ืืฉืจ ืื™ื ื• ื›ื•ืœืœ ืืช ื”ื™ืฉื™ืžื•ืช ืฉืœ ื”ืฉื™ื˜ื” ืขื InnoDB mysql.

ื ื™ืชื•ื— ืงื‘ืฆื™ื

ื‘-python, ืกื•ื’ ื ืชื•ื ื™ื bytes() ืžืฆื™ื’ ื ืชื•ื ื™ Unicode ื‘ืžืงื•ื ืงื‘ื•ืฆื” ืจื’ื™ืœื” ืฉืœ ืžืกืคืจื™ื. ืœืžืจื•ืช ืฉืืชื” ื™ื›ื•ืœ ืœื”ืฆื™ื’ ืืช ื”ืงื•ื‘ืฅ ื‘ืฆื•ืจื” ื–ื•, ืžื˜ืขืžื™ ื ื•ื—ื•ืช ืืชื” ื™ื›ื•ืœ ืœื”ืžื™ืจ ืืช ื”ื‘ืชื™ื ืœืฆื•ืจื” ืžืกืคืจื™ืช ืขืœ ื™ื“ื™ ื”ืžืจืช ืžืขืจืš ื”ื‘ืชื™ื ืœืžืขืจืš ืจื’ื™ืœ (list(example_byte_array)). ื‘ื›ืœ ืžืงืจื”, ืฉืชื™ ื”ืฉื™ื˜ื•ืช ืžืชืื™ืžื•ืช ืœื ื™ืชื•ื—.

ืœืื—ืจ ืขื™ื•ืŸ ื‘ืžืกืคืจ ืงื‘ืฆื™ ibd, ืชื•ื›ืœ ืœืžืฆื•ื ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd

ื™ืชืจื” ืžื›ืš, ืื ืชื—ืœืง ืืช ื”ืงื•ื‘ืฅ ื‘ืžื™ืœื•ืช ืžืคืชื— ืืœื•, ืชืงื‘ืœ ื‘ืขื™ืงืจ ื‘ืœื•ืงื™ื ืื—ื™ื“ื™ื ืฉืœ ื ืชื•ื ื™ื. ื ืฉืชืžืฉ ื‘-infimum ื›ืžื—ืœืง.

table = table.split("infimum".encode())

ืชืฆืคื™ืช ืžืขื ื™ื™ื ืช: ืœื˜ื‘ืœืื•ืช ืขื ื›ืžื•ืช ื ืชื•ื ื™ื ืงื˜ื ื”, ื‘ื™ืŸ infimum ืœ-supremum ื™ืฉ ืžืฆื‘ื™ืข ืœืžืกืคืจ ื”ืฉื•ืจื•ืช ื‘ื‘ืœื•ืง.

ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd - ื˜ื‘ืœืช ื‘ื“ื™ืงื•ืช ืขื ืฉื•ืจื” 1

ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd - ื˜ื‘ืœืช ื‘ื“ื™ืงื” ืขื 2 ืฉื•ืจื•ืช

ื ื™ืชืŸ ืœื“ืœื’ ืขืœ ื˜ื‘ืœืช ืžืขืจืš ื”ืฉื•ืจื•ืช[0]. ืœืื—ืจ ืฉืขื™ื™ื ืชื™ ื‘ื•, ืขื“ื™ื™ืŸ ืœื ื”ืฆืœื—ืชื™ ืœืžืฆื•ื ืืช ื ืชื•ื ื™ ื”ื˜ื‘ืœื” ื”ื’ื•ืœืžื™ื™ื. ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื‘ืœื•ืง ื–ื” ืžืฉืžืฉ ืœืื—ืกื•ืŸ ืื™ื ื“ืงืกื™ื ื•ืžืคืชื—ื•ืช.
ื”ื—ืœ ืžื˜ื‘ืœื”[1] ื•ืžืชืจื’ื ืื•ืชื” ืœืžืขืจืš ืžืกืคืจื™, ืืชื” ื›ื‘ืจ ื™ื›ื•ืœ ืœื”ื‘ื—ื™ืŸ ื‘ื›ืžื” ื“ืคื•ืกื™ื, ื›ืœื•ืžืจ:

ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd

ืืœื• ื”ื ืขืจื›ื™ int ื”ืžืื•ื—ืกื ื™ื ื‘ืžื—ืจื•ื–ืช. ื”ื‘ื™ืช ื”ืจืืฉื•ืŸ ืžืฆื™ื™ืŸ ืื ื”ืžืกืคืจ ื—ื™ื•ื‘ื™ ืื• ืฉืœื™ืœื™. ื‘ืžืงืจื” ืฉืœื™, ื›ืœ ื”ืžืกืคืจื™ื ื—ื™ื•ื‘ื™ื™ื. ืžืชื•ืš 3 ื”ื‘ืชื™ื ื”ื ื•ืชืจื™ื, ืืชื” ื™ื›ื•ืœ ืœืงื‘ื•ืข ืืช ื”ืžืกืคืจ ื‘ืืžืฆืขื•ืช ื”ืคื•ื ืงืฆื™ื” ื”ื‘ืื”. ืชึทืกืจึดื™ื˜:

def find_int(val: str):  # example '128, 1, 2, 3'
    val = [int(v) for v in  val.split(", ")]
    result_int = val[1]*256**2 + val[2]*256*1 + val[3]
    return result_int

ืœื“ื•ื’ืžื”, 128, 0, 0, 1 = 1ืื• 128, 0, 75, 108 = 19308.
ืœื˜ื‘ืœื” ื”ื™ื” ืžืคืชื— ืจืืฉื™ ืขื ื”ื’ื“ืœื” ืื•ื˜ื•ืžื˜ื™ืช, ื•ื ื™ืชืŸ ืœืžืฆื•ื ืื•ืชื• ื’ื ื›ืืŸ

ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd

ืœืื—ืจ ื”ืฉื•ื•ืื” ื‘ื™ืŸ ื”ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช ื”ื‘ื“ื™ืงื”, ื”ืชื‘ืจืจ ืฉืื•ื‘ื™ื™ืงื˜ DATETIME ืžื•ืจื›ื‘ ืž-5 ื‘ืชื™ื ื•ื”ื—ืœ ื‘-153 (ื›ื›ืœ ื”ื ืจืื” ืžืฆื‘ื™ืข ืขืœ ืžืจื•ื•ื—ื™ื ืฉื ืชื™ื™ื). ืžื›ื™ื•ื•ืŸ ืฉื˜ื•ื•ื— DATTIME ื”ื•ื '1000-01-01' ืขื“ '9999-12-31', ืื ื™ ื—ื•ืฉื‘ ืฉืžืกืคืจ ื”ื‘ืชื™ื ืขืฉื•ื™ ืœื”ืฉืชื ื•ืช, ืื‘ืœ ื‘ืžืงืจื” ืฉืœื™, ื”ื ืชื•ื ื™ื ื ื•ืคืœื™ื ื‘ืชืงื•ืคื” ืฉื‘ื™ืŸ 2016 ืœ-2019, ืื– ื ื ื™ื— ืžืกืคื™ืง 5 ื‘ืชื™ื.

ื›ื“ื™ ืœืงื‘ื•ืข ืืช ื”ื–ืžืŸ ืœืœื ืฉื ื™ื•ืช, ื ื›ืชื‘ื• ื”ืคื•ื ืงืฆื™ื•ืช ื”ื‘ืื•ืช. ืชึทืกืจึดื™ื˜:

day_ = lambda x: x % 64 // 2  # {x,x,X,x,x }

def hour_(x1, x2):  # {x,x,X1,X2,x}
    if x1 % 2 == 0:
        return x2 // 16
    elif x1 % 2 == 1:
        return x2 // 16 + 16
    else:
        raise ValueError

min_ = lambda x1, x2: (x1 % 16) * 4 + (x2 // 64)  # {x,x,x,X1,X2}

ืœื ื ื™ืชืŸ ื”ื™ื” ืœื›ืชื•ื‘ ืคื•ื ืงืฆื™ื” ืคื•ื ืงืฆื™ื•ื ืœื™ืช ืขื‘ื•ืจ ื”ืฉื ื” ื•ื”ื—ื•ื“ืฉ, ืื– ื ืืœืฆืชื™ ืœืคืจื•ืฅ ืื•ืชื”. ืชึทืกืจึดื™ื˜:

ym_list = {'2016, 1': '153, 152, 64', '2016, 2': '153, 152, 128', 
           '2016, 3': '153, 152, 192', '2016, 4': '153, 153, 0',
           '2016, 5': '153, 153, 64', '2016, 6': '153, 153, 128', 
           '2016, 7': '153, 153, 192', '2016, 8': '153, 154, 0', 
           '2016, 9': '153, 154, 64', '2016, 10': '153, 154, 128', 
           '2016, 11': '153, 154, 192', '2016, 12': '153, 155, 0',
           '2017, 1': '153, 155, 128', '2017, 2': '153, 155, 192', 
           '2017, 3': '153, 156, 0', '2017, 4': '153, 156, 64',
           '2017, 5': '153, 156, 128', '2017, 6': '153, 156, 192',
           '2017, 7': '153, 157, 0', '2017, 8': '153, 157, 64',
           '2017, 9': '153, 157, 128', '2017, 10': '153, 157, 192', 
           '2017, 11': '153, 158, 0', '2017, 12': '153, 158, 64', 
           '2018, 1': '153, 158, 192', '2018, 2': '153, 159, 0',
           '2018, 3': '153, 159, 64', '2018, 4': '153, 159, 128', 
           '2018, 5': '153, 159, 192', '2018, 6': '153, 160, 0',
           '2018, 7': '153, 160, 64', '2018, 8': '153, 160, 128',
           '2018, 9': '153, 160, 192', '2018, 10': '153, 161, 0', 
           '2018, 11': '153, 161, 64', '2018, 12': '153, 161, 128',
           '2019, 1': '153, 162, 0', '2019, 2': '153, 162, 64', 
           '2019, 3': '153, 162, 128', '2019, 4': '153, 162, 192', 
           '2019, 5': '153, 163, 0', '2019, 6': '153, 163, 64',
           '2019, 7': '153, 163, 128', '2019, 8': '153, 163, 192',
           '2019, 9': '153, 164, 0', '2019, 10': '153, 164, 64', 
           '2019, 11': '153, 164, 128', '2019, 12': '153, 164, 192',
           '2020, 1': '153, 165, 64', '2020, 2': '153, 165, 128',
           '2020, 3': '153, 165, 192','2020, 4': '153, 166, 0', 
           '2020, 5': '153, 166, 64', '2020, 6': '153, 1, 128',
           '2020, 7': '153, 166, 192', '2020, 8': '153, 167, 0', 
           '2020, 9': '153, 167, 64','2020, 10': '153, 167, 128',
           '2020, 11': '153, 167, 192', '2020, 12': '153, 168, 0'}

def year_month(x1, x2):  # {x,X,X,x,x }

    for key, value in ym_list.items():
        key = [int(k) for k in key.replace("'", "").split(", ")]
        value = [int(v) for v in value.split(", ")]
        if x1 == value[1] and x2 // 64 == value[2] // 64:
            return key
    return 0, 0

ืื ื™ ื‘ื˜ื•ื— ืฉืื ืืชื” ืžื‘ืœื” ื–ืžืŸ n, ื ื™ืชืŸ ืœืชืงืŸ ืืช ืื™ ื”ื”ื‘ื ื” ื”ื–ื•.
ืœืื—ืจ ืžื›ืŸ, ืคื•ื ืงืฆื™ื” ืฉืžื—ื–ื™ืจื” ืื•ื‘ื™ื™ืงื˜ ืชืืจื™ืš-ืฉืขื” ืžืžื—ืจื•ื–ืช. ืชึทืกืจึดื™ื˜:

def find_data_time(val:str):
    val = [int(v) for v in val.split(", ")]
    day = day_(val[2])
    hour = hour_(val[2], val[3])
    minutes = min_(val[3], val[4])
    year, month = year_month(val[1], val[2])
    return datetime(year, month, day, hour, minutes)

ื”ืฆืœื™ื— ืœื–ื”ื•ืช ืขืจื›ื™ื ืฉื—ื•ื–ืจื™ื ืขืœ ืขืฆืžื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืž-int, int, datetime, datetime ืฉื—ื–ื•ืจ ื ืชื•ื ื™ื ืžื˜ื‘ืœืื•ืช XtraDB ืœืœื ืงื•ื‘ืฅ ืžื‘ื ื” ื‘ืืžืฆืขื•ืช ื ื™ืชื•ื— ื‘ืชื™ื ืื—ืจ ื‘ืชื™ื ืฉืœ ืงื•ื‘ืฅ ibd, ื ืจืื” ืฉื–ื” ืžื” ืฉืืชื” ืฆืจื™ืš. ื™ืชืจื” ืžื›ืš, ืจืฆืฃ ื›ื–ื” ืื™ื ื• ื—ื•ื–ืจ ืขืœ ืขืฆืžื• ืคืขืžื™ื™ื ื‘ื›ืœ ืฉื•ืจื”.

ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™, ืื ื• ืžื•ืฆืื™ื ืืช ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื:

fined = re.findall(r'128, d*, d*, d*, 128, d*, d*, d*, 153, 1[6,5,4,3]d, d*, d*, d*, 153, 1[6,5,4,3]d, d*, d*, d*', int_array)

ืฉื™ืžื• ืœื‘ ืฉื‘ื—ื™ืคื•ืฉ ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ ื–ื”, ืœื ื ื™ืชืŸ ื™ื”ื™ื” ืœืงื‘ื•ืข ืขืจื›ื™ NULL ื‘ืฉื“ื•ืช ื”ื ื“ืจืฉื™ื, ืืš ื‘ืžืงืจื” ืฉืœื™ ื–ื” ืœื ืงืจื™ื˜ื™. ื•ืื– ืื ื—ื ื• ืขื•ื‘ืจื™ื ืขืœ ืžื” ืฉืžืฆืื ื• ื‘ืœื•ืค. ืชึทืกืจึดื™ื˜:

result = []
for val in fined:
    pre_result = []
    bd_int  = re.findall(r"128, d*, d*, d*", val)
    bd_date= re.findall(r"(153, 1[6,5,4,3]d, d*, d*, d*)", val)
    for it in bd_int:
        pre_result.append(find_int(bd_int[it]))
    for bd in bd_date:
        pre_result.append(find_data_time(bd))
    result.append(pre_result)

ืœืžืขืฉื”, ื–ื” ื”ื›ืœ, ื”ื ืชื•ื ื™ื ืžืžืขืจืš ื”ืชื•ืฆืื•ืช ื”ื ื”ื ืชื•ื ื™ื ืฉืื ื• ืฆืจื™ื›ื™ื. ###ื .ื‘.###
ืื ื™ ืžื‘ื™ืŸ ืฉืฉื™ื˜ื” ื–ื• ืœื ืžืชืื™ืžื” ืœื›ื•ืœื, ืื‘ืœ ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ืฉืœ ื”ืžืืžืจ ื”ื™ื ืœื”ื ื™ืข ืœืคืขื•ืœื” ื•ืœื ืœืคืชื•ืจ ืืช ื›ืœ ื”ื‘ืขื™ื•ืช ืฉืœืš. ืื ื™ ื—ื•ืฉื‘ ืฉื”ืคืชืจื•ืŸ ื”ื ื›ื•ืŸ ื‘ื™ื•ืชืจ ื™ื”ื™ื” ืœื”ืชื—ื™ืœ ืœืœืžื•ื“ ืืช ืงื•ื“ ื”ืžืงื•ืจ ื‘ืขืฆืžืš ืžืจื™ืื“ื‘, ืืš ื‘ืฉืœ ื–ืžืŸ ืžื•ื’ื‘ืœ, ื ืจืื” ื”ื™ื” ืฉื”ืฉื™ื˜ื” ื”ื ื•ื›ื—ื™ืช ื”ื™ื ื”ืžื”ื™ืจื” ื‘ื™ื•ืชืจ.

ื‘ืžืงืจื™ื ืžืกื•ื™ืžื™ื, ืœืื—ืจ ื ื™ืชื•ื— ื”ืงื•ื‘ืฅ, ืชื•ื›ืœ ืœืงื‘ื•ืข ืืช ื”ืžื‘ื ื” ื”ืžืฉื•ืขืจ ื•ืœืฉื—ื–ืจ ืื•ืชื• ื‘ืื—ืช ืžื”ืฉื™ื˜ื•ืช ื”ืกื˜ื ื“ืจื˜ื™ื•ืช ืžื”ืงื™ืฉื•ืจื™ื ืœืžืขืœื”. ื–ื” ื™ื”ื™ื” ื”ืจื‘ื” ื™ื•ืชืจ ื ื›ื•ืŸ ื•ื™ื’ืจื•ื ืคื—ื•ืช ื‘ืขื™ื•ืช.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”