Несколько баз данных, которые я недавно изучал, реализовали виртуальную машину для выполнения соответствующих операций чтения и записи данных. Например, проверьте this article on SQLite's virtual machine they call the 'VDBE'. Мне любопытно, каковы преимущества такой архитектуры. Я бы предположил, что производительность одна, но почему виртуальная машина, как это, работает быстрее? На самом деле, похоже, что этот дополнительный слой может привести к медленному запуску. Так, возможно, это для безопасности? Или переносимость? Во всяком случае, просто интересно.Каковы основные преимущества внедрения виртуальной машины как части приложения?
ответ
Они выполняют свои функции на уровне «сборки», где вы получаете приемлемую скорость, не теряя при этом переносимость. Я думаю, что они предоставляют виртуальную машину, чтобы получить сбалансированный компромисс. Либо вы выполняете код высокого уровня (код SQL **) как язык высокого уровня, и вы теряете скорость, но получаете удобство. Другой способ - создать специфичный для платформы (родной) код, который будет работать намного быстрее по сравнению с интерпретируемым, но это много хлопот для широко распространенной библиотеки, которая работает там, где существует ANSI-C.
** Это, конечно, не обязательно SQL-код. I думаю, что императивное представление намного лучше подходит для исполнения. Во всяком случае, это представление по-прежнему является представлением очень высокого уровня по сравнению с «опкодом».
Но почему бы получить скорость с помощью модели виртуальной машины? – Marplesoft
@Marplesoft: главным образом потому, что вы сохраняете время, необходимое для анализа исходного языка и его семантики (SQL в случае SQLite). Компилятор, транскрибирующий исходный язык для байт-кода VM, очень много, включая некоторые оптимизации, и все, что у вас осталось, - это запустить полученный байт-код как можно быстрее. –