ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

์„ ์‚ฌ ์‹œ๋Œ€

์„œ๋ฒ„๊ฐ€ ๋žœ์„ฌ์›จ์–ด ๋ฐ”์ด๋Ÿฌ์Šค์˜ ๊ณต๊ฒฉ์„ ๋ฐ›์•˜๋Š”๋ฐ, "์šด์ด ์ข‹์€ ์‚ฌ๊ณ "๋กœ ์ธํ•ด .ibd ํŒŒ์ผ(innodb ํ…Œ์ด๋ธ”์˜ ์›์‹œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ)์€ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋˜์—ˆ์ง€๋งŒ ๋™์‹œ์— .fpm ํŒŒ์ผ์€ ์™„์ „ํžˆ ์•”ํ˜ธํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค( ๊ตฌ์กฐ ํŒŒ์ผ). ์ด ๊ฒฝ์šฐ .idb๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ‘œ์ค€ ๋„๊ตฌ ๋ฐ ๊ฐ€์ด๋“œ๋ฅผ ํ†ตํ•ด ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์šฐ์ˆ˜ํ•œ ~์ด ๋˜๋‹ค;
  • ๋ถ€๋ถ„์ ์œผ๋กœ ์•”ํ˜ธํ™”๋œ ํ…Œ์ด๋ธ”. ๋Œ€๋ถ€๋ถ„ ์ด๊ฒƒ๋“ค์€ ํฐ ํ…Œ์ด๋ธ”์ธ๋ฐ, (๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ๋ฐ”์— ๋”ฐ๋ฅด๋ฉด) ๊ณต๊ฒฉ์ž๋Š” ์ „์ฒด ์•”ํ˜ธํ™”๋ฅผ ์œ„ํ•œ RAM์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
  • ๋ณต์›ํ•  ์ˆ˜ ์—†๋Š” ์™„์ „ํžˆ ์•”ํ˜ธํ™”๋œ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ์ธ์ฝ”๋”ฉ(์ œ ๊ฒฝ์šฐ์—๋Š” UTF8)์œผ๋กœ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์—์„œ ํ…Œ์ด๋ธ”์„ ์—ด๊ณ  ํ…์ŠคํŠธ ํ•„๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํŒŒ์ผ์„ ๋ณด๋ฉด ํ…Œ์ด๋ธ”์ด ์–ด๋–ค ์˜ต์…˜์— ์†ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

๋˜ํ•œ ํŒŒ์ผ ์‹œ์ž‘ ๋ถ€๋ถ„์—๋Š” 0๋ฐ”์ดํŠธ๊ฐ€ ๋งŽ์ด ๊ด€์ฐฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ธ”๋ก ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜(๊ฐ€์žฅ ์ผ๋ฐ˜์ )์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ”์ด๋Ÿฌ์Šค๋„ ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

๋‚ด ๊ฒฝ์šฐ ๊ณต๊ฒฉ์ž๋Š” ์•”ํ˜ธํ™”๋œ ๊ฐ ํŒŒ์ผ ๋์— 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 ์ •์ˆ˜(11);
  • id_user ์ •์ˆ˜(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 ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์—‘์ŠคํŠธ๋ผDB์ด๋Š” InnoDB mysql์„ ์‚ฌ์šฉํ•œ ๋ฉ”์†Œ๋“œ์˜ ์ ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋ถ„์„

ํŒŒ์ด์ฌ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ฐ”์ดํŠธ() ์ผ๋ฐ˜ ์ˆซ์ž ์ง‘ํ•ฉ ๋Œ€์‹  ์œ ๋‹ˆ์ฝ”๋“œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜•์‹์œผ๋กœ ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ํŽธ์˜์ƒ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์„ ์ผ๋ฐ˜ ๋ฐฐ์—ด(list(example_byte_array))๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ”์ดํŠธ๋ฅผ ์ˆซ์ž ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ ๋ถ„์„์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ibd ํŒŒ์ผ์„ ์‚ดํŽด๋ณธ ํ›„ ๋‹ค์Œ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

๊ฒŒ๋‹ค๊ฐ€ ํŒŒ์ผ์„ ์ด๋Ÿฌํ•œ ํ‚ค์›Œ๋“œ๋กœ ๋‚˜๋ˆ„๋ฉด ๋Œ€๋ถ€๋ถ„ ๊ท ์ผํ•œ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. infimum์„ ์ œ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

ํฅ๋ฏธ๋กœ์šด ๊ด€์ฐฐ: ์ ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ infimum๊ณผ supermum ์‚ฌ์ด์—๋Š” ๋ธ”๋ก์˜ ํ–‰ ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ โ€” ์ฒซ ๋ฒˆ์งธ ํ–‰์ด ์žˆ๋Š” ํ…Œ์ŠคํŠธ ํ…Œ์ด๋ธ”

ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ - 2์ค„์˜ ํ…Œ์ŠคํŠธ ํ…Œ์ด๋ธ”

ํ–‰ ๋ฐฐ์—ด table[0]์€ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ดํŽด๋ณธ ํ›„์—๋„ ์›์‹œ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด ๋ธ”๋ก์€ ์ธ๋ฑ์Šค์™€ ํ‚ค๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
table[1]๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ˆซ์ž ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ํŒจํ„ด์„ ์ด๋ฏธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

๋ฌธ์ž์—ด์— ์ €์žฅ๋œ 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.
ํ…Œ์ด๋ธ”์—๋Š” ์ž๋™ ์ฆ๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์—์„œ๋„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ

ํ…Œ์ŠคํŠธ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•œ ๊ฒฐ๊ณผ 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์—์„œ ์ž์ฃผ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ’์„ ๊ฐ์ง€ํ•˜๋„๋ก ๊ด€๋ฆฌ ibd ํŒŒ์ผ์˜ ๋ฐ”์ดํŠธ๋ณ„ ๋ถ„์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ ํŒŒ์ผ ์—†์ด XtraDB ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ, ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋Ÿฌํ•œ ์‹œํ€€์Šค๋Š” ํ•œ ์ค„์— ๋‘ ๋ฒˆ ๋ฐ˜๋ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

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)

์‚ฌ์‹ค ๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ๋ฐฐ์—ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ###์ถ”์‹ .###
๋‚˜๋Š” ์ด ๋ฐฉ๋ฒ•์ด ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ธฐ์‚ฌ์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ฆ‰๊ฐ์ ์ธ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๊ณต๋ถ€ํ•ด ๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์˜ฌ๋ฐ”๋ฅธ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งˆ๋ฆฌ ์•„๋ธŒ, ๊ทธ๋Ÿฌ๋‚˜ ์‹œ๊ฐ„์˜ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ํ˜„์žฌ์˜ ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒƒ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ์„ ๋ถ„์„ํ•œ ํ›„ ๋Œ€๋žต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ์œ„ ๋งํฌ์˜ ํ‘œ์ค€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ›จ์”ฌ ๋” ์ •ํ™•ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ๋œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€