Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
По-моему можно просто сделать 1 колонку с 10-значным номером PRIMARY KEY без индексов
Просто собрать из них 10-значный номер, по ним индексировать и искать.
// Поиск в списке серий
echo ($pos = strpos($series, $seria)) !== false && $pos % 2 == 0 ? 'INVALID' : 'VALID';
$ truncate -s 5G mmap.txt
$ ls -al mmap.txt
-rw-rw-r-- 1 user user 5368709120 Авг 24 17:34 mmap.txt
# создали файл размером 5ГБ
# на диске он занимает всего 4КБ !
$ du -h mmap.txt
4K mmap.txt
# поработаем с ним
$ python
>>> import mmap
>>> f=open('mmap.txt', 'r+')
>>> m=mmap.mmap(f.fileno(), 0)
# запишем в 3 разные места файла что-нибудь
>>> m[1234567] = 'C'
>>> m[0x3030] = chr(0xff)
>>> m[0x10:0x14] = 4 * b'Z'
# далее жмем Ctrl+Z, и не закрывая или синкая файл, идем его изучать
[1]+ Stopped python
$ ls -l mmap.txt
-rw-rw-r-- 1 user user 5368709120 Авг 24 18:13 mmap.txt
# файл имеет все тот же размер в 5ГБ
$ du -h mmap.txt
12K mmap.txt
# но на диске его "раздуло" аж до 12 КБ !
# то есть умная файловая система хранит только те страницы памяти,
# в которые была произведена какая-то запись.
# Все остальные страницы памяти и место в файле выделено только виртуально.
# файл можно сжать с помощью bzip2 - поскольку он почти пустой, то сожмется в 12КБ.
# но! после распаковки новый файл будет занимать на диске настоящие 5ГБ.
# Дело в том, что bunzip2 честно запишет все 0х00 байты в файле, и ось так же честно перенесет их на диск.
# Конечно, приложив допусилия, это можно отфильтровать.
Поиск недействительных паспортов или учимся готовить бинарные файлы