перепиши код используя sqllite 
const fs = require('fs');
const { once } = require('events');
const readline = require('readline');

// Функция для точного измерения времени в миллисекундах
function getTimeInMilliseconds(start) {
  const diff = process.hrtime(start);
  return (diff[0] * 1e9 + diff[1]) / 1e6; // Перевод в миллисекунды
}

// Оптимизированная функция генерации случайной строки длиной 10 символов
function generateRandomString(length = 10) {
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  const charsLength = chars.length;
  const resultArray = new Array(length);
  for (let i = 0; i < length; i++) {
    resultArray[i] = chars.charAt(Math.floor(Math.random() * charsLength));
  }
  return resultArray.join('');
}

(async () => {
  try {
    const NUM_RECORDS = 10000000; // 10,000,000 записей
    const OUTPUT_FILE = 'data.ndjson';

    // Создание потока записи
    const writeStream = fs.createWriteStream(OUTPUT_FILE, { encoding: 'utf8' });

    const startGeneration = process.hrtime();

    for (let i = 0; i < NUM_RECORDS; i++) {
      const record = {
        id: i + 1,
        value: generateRandomString(10),
      };
      const json = JSON.stringify(record);
      writeStream.write(json + '\n'); // Каждая запись на отдельной строке

      // Периодически освобождаем цикл событий, чтобы избежать блокировки
      if ((i + 1) % 100000 === 0) { // каждые 100,000 записей
        await new Promise(resolve => setImmediate(resolve));
        console.log(`Сгенерировано ${i + 1} записей`);
      }
    }

    // Закрываем поток и ждем завершения записи
    writeStream.end();
    await once(writeStream, 'finish');

    const generationTime = getTimeInMilliseconds(startGeneration);

    console.log(`Сгенерировано ${NUM_RECORDS} записей за ${generationTime.toFixed(3)} мс`);
    console.log(`Данные сохранены в ${OUTPUT_FILE}`);

    // Создание Map из файла NDJSON
    console.log('Начинаю чтение файла и создание Map...');
    const readStart = process.hrtime();

    const recordsMap = new Map();
    let count = 0;

    const rl = readline.createInterface({
      input: fs.createReadStream(OUTPUT_FILE),
      crlfDelay: Infinity
    });

    rl.on('line', (line) => {
      if (line.trim() === '') return; // Пропуск пустых строк
      const record = JSON.parse(line);
      recordsMap.set(record.id, record);
      count++;
      if (count % 100000 === 0) {
        console.log(`Загружено ${count} записей`);
      }
    });

    await once(rl, 'close');

    const mapTime = getTimeInMilliseconds(readStart);
    console.log(`Map создана за ${mapTime.toFixed(3)} мс`);

    // Генерация массива из 1000 случайных ID для поиска
    const NUM_SEARCHES = 1000;
    const randomIds = Array.from({ length: NUM_SEARCHES }, () => Math.floor(Math.random() * NUM_RECORDS) + 1);

    // Массив для хранения времени поиска каждого ID
    const searchTimes = [];

    console.log(`Начинаю выполнение ${NUM_SEARCHES} случайных поисков...`);

    for (let i = 0; i < NUM_SEARCHES; i++) {
      const id = randomIds[i];
      const startSearch = process.hrtime();
      const foundRecord = recordsMap.get(id);
      const searchTime = getTimeInMilliseconds(startSearch);
      searchTimes.push(searchTime);

      if (foundRecord) {
        console.log(`Поиск ${i + 1}: Запись с id=${id} найдена за ${searchTime.toFixed(3)} мс`);
      } else {
        console.log(`Поиск ${i + 1}: Запись с id=${id} не найдена за ${searchTime.toFixed(3)} мс`);
      }
    }

    // Вычисление статистики по времени поисков
    const totalSearchTime = searchTimes.reduce((acc, curr) => acc + curr, 0);
    const averageSearchTime = totalSearchTime / NUM_SEARCHES;
    const minSearchTime = Math.min(...searchTimes);
    const maxSearchTime = Math.max(...searchTimes);

    console.log(`\nСтатистика поиска:`);
    console.log(`Среднее время поиска: ${averageSearchTime.toFixed(3)} мс`);
    console.log(`Минимальное время поиска: ${minSearchTime.toFixed(3)} мс`);
    console.log(`Максимальное время поиска: ${maxSearchTime.toFixed(3)} мс`);

  } catch (error) {
    console.error('Произошла ошибка:', error);
  }
})();