Любая реляционная база данных должна иметь возможность обрабатывать что-то подобное (в основном вы просто объединяете пару таблиц, одну для данных и одну для метаданных). SQLite должен работать нормально.
Ваша первая таблица будет содержать сами данные с уникальными идентификаторами для каждой записи. Тогда ваша вторая таблица будет иметь что-то вроде 3 рабочих столбцов: ключ метаданных, значение метаданных и связанный идентификатор записи.
Пример таблицы данных:
ID Data
--------
1 (1,1)
2 (7,4)
3 (2,3)
Пример таблицы метаданных:
ID Key Value
--------------------------
1 "color" yellow
1 "age" 3
2 "color" "blue"
2 "age" 2
3 "color" "blue"
3 "age" 4
3 "loc" "usa"
Тогда, если вы хотите найти все точки данных с возрастом не менее 3 лет, вы должны использовать запрос, подобный следующему:
SELECT * from datatable WHERE datatable.ID = metadatatable.ID AND metadatatable.Key="age" AND metadatatable.Value >= 3