Вот версия сценария Кусалананды, который использует perl
для преобразования file1
из :
разделены на TAB, разделенные ранее загрузив его в sqlite3
.
Встроенный скрипт perl
проверяет наличие 5 полей, а не 4. Если есть, он добавляет поле 3 к полю 2 (восстанавливая :
, которое было удалено autosplit), затем удаляет поле 3.
#!/bin/sh
address_file="file2"
data_file="file1"
database="database.db"
rm -f "$database"
sqlite3 "$database" <
IMO, sqlite не подходит для такой большой базы данных. Я бы рекомендовал вместо этого использовать mysql
или postgresql
. Для такого рода задач чистая скорость mysql
, вероятно, делает его лучшим выбором - он быстрее для простых вещей, таких как эта, но postgresql намного быстрее для более сложных задач - по моему опыту, pg «умный и быстрый» "(т.е.он может добиться значительных улучшений скорости в сложных задачах, работая умно, а не усердно), mysql «тупой быстрый» (то есть он много работает, не имея особых возможностей для умной работы).
Приведенный выше сценарий можно легко адаптировать для работы с клиентами командной строки psql
или mysql
вместо sqlite3
, но я бы изменил ] CREATE TABLE
команды для использования фиксированного размера CHARACTER (size)
вместо TEXT
, где size
- разумное предположение, какой максимальный размер для каждое поле - например, возможно 255 символов для поля adr
и 10-50 символов для остальных.
одна из возможных оптимизаций состоит в том, чтобы тщательно выбирать размеры полей, чтобы каждая запись была четным делителем размера блока вашего диска (с учетом накладных расходов mysql / postgresql на каждую запись). 512 байтов должно хватить для всех распространенных размеров блоков. сделайте поля любого необходимого размера и добавьте дополнительное неиспользуемое поле CHARACTER (size)
, чтобы компенсировать разницу. Смысл этого в том, чтобы записи никогда не пересекали границу блока, поэтому движку db нужно читать только один дисковый блок, чтобы получить все данные для данной записи (фактически, он будет читать несколько записей в одном блоке с большинство текущих размеров блоков, но это только помогает производительности, не может повредить ей).
https://dba.stackexchange.com/ , вероятно, лучший сайт для поиска или запроса информации об оптимизации размеров записей.
Вы можете использовать этот код с github https://github.com/delphiki/AirStatus.
git clone git@github.com:delphiki/AirStatus.git
cd AirStatus
pip3 install bleak
python3 main.py
Вы увидите следующее при использовании:
{"status": 1, "charge": {"left": 90, "right": 90, "case": -1}, "charging": "N/A", "model": "AirPods", "date": "2021-09-21 12:30:30", "raw": "0719010f202b998f000005521019d293ae902e66fbc70XXXXXXXX"}