์ ์ฌ ์๋
์๋ฒ๊ฐ ๋์ฌ์จ์ด ๋ฐ์ด๋ฌ์ค์ ๊ณต๊ฒฉ์ ๋ฐ์๋๋ฐ, "์ด์ด ์ข์ ์ฌ๊ณ "๋ก ์ธํด .ibd ํ์ผ(innodb ํ ์ด๋ธ์ ์์ ๋ฐ์ดํฐ ํ์ผ)์ ๋ถ๋ถ์ ์ผ๋ก ๊ทธ๋๋ก ์ ์ง๋์์ง๋ง ๋์์ .fpm ํ์ผ์ ์์ ํ ์ํธํ๋์์ต๋๋ค( ๊ตฌ์กฐ ํ์ผ). ์ด ๊ฒฝ์ฐ .idb๋ ๋ค์๊ณผ ๊ฐ์ด ๋๋ ์ ์์ต๋๋ค.
- ํ์ค ๋๊ตฌ ๋ฐ ๊ฐ์ด๋๋ฅผ ํตํด ๋ณต์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌํ ๊ฒฝ์ฐ์๋ ์ฐ์ํ
~์ด ๋๋ค ; - ๋ถ๋ถ์ ์ผ๋ก ์ํธํ๋ ํ ์ด๋ธ. ๋๋ถ๋ถ ์ด๊ฒ๋ค์ ํฐ ํ ์ด๋ธ์ธ๋ฐ, (๋ด๊ฐ ์ดํดํ๋ ๋ฐ์ ๋ฐ๋ฅด๋ฉด) ๊ณต๊ฒฉ์๋ ์ ์ฒด ์ํธํ๋ฅผ ์ํ RAM์ด ์ถฉ๋ถํ์ง ์์์ต๋๋ค.
- ๋ณต์ํ ์ ์๋ ์์ ํ ์ํธํ๋ ํ
์ด๋ธ์
๋๋ค.
์ํ๋ ์ธ์ฝ๋ฉ(์ ๊ฒฝ์ฐ์๋ UTF8)์ผ๋ก ํ ์คํธ ํธ์ง๊ธฐ์์ ํ ์ด๋ธ์ ์ด๊ณ ํ ์คํธ ํ๋๊ฐ ์๋์ง ํ์ผ์ ๋ณด๋ฉด ํ ์ด๋ธ์ด ์ด๋ค ์ต์ ์ ์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ํ ํ์ผ ์์ ๋ถ๋ถ์๋ 0๋ฐ์ดํธ๊ฐ ๋ง์ด ๊ด์ฐฐ๋ ์ ์์ผ๋ฉฐ, ๋ธ๋ก ์ํธํ ์๊ณ ๋ฆฌ์ฆ(๊ฐ์ฅ ์ผ๋ฐ์ )์ ์ฌ์ฉํ๋ ๋ฐ์ด๋ฌ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
๋ด ๊ฒฝ์ฐ ๊ณต๊ฒฉ์๋ ์ํธํ๋ ๊ฐ ํ์ผ ๋์ 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 ํ
์ด๋ธ์ ์ฌ์ฉํ์ง๋ง ์ค์ ๋ก๋
ํ์ผ ๋ถ์
ํ์ด์ฌ์์๋ ๋ฐ์ดํฐ ์ ํ
์ฌ๋ฌ ibd ํ์ผ์ ์ดํด๋ณธ ํ ๋ค์์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ฒ๋ค๊ฐ ํ์ผ์ ์ด๋ฌํ ํค์๋๋ก ๋๋๋ฉด ๋๋ถ๋ถ ๊ท ์ผํ ๋ฐ์ดํฐ ๋ธ๋ก์ ์ป์ ์ ์์ต๋๋ค. infimum์ ์ ์๋ก ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
table = table.split("infimum".encode())
ํฅ๋ฏธ๋ก์ด ๊ด์ฐฐ: ์ ์ ์์ ๋ฐ์ดํฐ๊ฐ ์๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ infimum๊ณผ supermum ์ฌ์ด์๋ ๋ธ๋ก์ ํ ์์ ๋ํ ํฌ์ธํฐ๊ฐ ์์ต๋๋ค.
โ ์ฒซ ๋ฒ์งธ ํ์ด ์๋ ํ ์คํธ ํ ์ด๋ธ
- 2์ค์ ํ ์คํธ ํ ์ด๋ธ
ํ ๋ฐฐ์ด table[0]์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. ์ดํด๋ณธ ํ์๋ ์์ ํ
์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์์์ต๋๋ค. ์๋ง๋ ์ด ๋ธ๋ก์ ์ธ๋ฑ์ค์ ํค๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
table[1]๋ถํฐ ์์ํ์ฌ ์ซ์ ๋ฐฐ์ด๋ก ๋ณํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ํจํด์ ์ด๋ฏธ ํ์ธํ ์ ์์ต๋๋ค.
๋ฌธ์์ด์ ์ ์ฅ๋ 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.
ํ
์ด๋ธ์๋ ์๋ ์ฆ๊ฐ ๊ธฐ๋ฅ์ด ์๋ ๊ธฐ๋ณธ ํค๊ฐ ์์ผ๋ฉฐ ์ฌ๊ธฐ์์๋ ์ฐพ์ ์ ์์ต๋๋ค.
ํ ์คํธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ๊ฒฐ๊ณผ 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์์ ์์ฃผ ๋ฐ๋ณต๋๋ ๊ฐ์ ๊ฐ์งํ๋๋ก ๊ด๋ฆฌ , ์ด๊ฒ์ด ๋น์ ์๊ฒ ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ๋ํ ์ด๋ฌํ ์ํ์ค๋ ํ ์ค์ ๋ ๋ฒ ๋ฐ๋ณต๋์ง ์์ต๋๋ค.
์ ๊ท์์ ์ฌ์ฉํ์ฌ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ต๋๋ค.
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