Pisanie języka specyficznego dla domeny do wybierania wierszy z tabeli

Piszę serwer, który, jak oczekuję, będzie prowadzony przez wielu różnych ludzi, z którymi nie będę miał bezpośredniego kontaktu. Serwery będą się komunikować ze sobą w klastrze. Część funkcjonalności serwera polega na wybraniu małego podzbioru wierszy z potencjalnie bardzo dużej tabeli. Dokładny wybór wybranych wierszy będzie wymagał pewnego dostrojenia i ważne jest, aby osoba uruchamiająca klaster (np. Ja) zaktualizowała kryteria wyboru, nie zmuszając każdego administratora serwera do wdrożenia nowej wersji serwera .

Po prostu napisanie funkcji w Pythonie nie jest opcją, ponieważ nikt nie będzie chciał instalować serwera, który pobiera i wykonuje dowolny kod Pythona w czasie wykonywania.

Potrzebuję sugestii na temat najprostszego sposobu wdrożenia języka specyficznego dla domeny, aby osiągnąć ten cel. Język musi być zdolny do prostej oceny wyrażeń, a także do sprawdzania indeksów tabel i iterowania przez zwrócone wiersze. Łatwość pisania i czytania języka jest drugorzędna, aby ułatwić jego wdrożenie. Wolałbym też nie pisać całego optymalizatora zapytań, więc coś, co jawnie określa, które indeksy zapytań byłyby idealne.

Interfejs, który będzie musiał skompilować, będzie podobny do eksportowanego magazynu danych App Engine: można wyszukiwać sekwencje zakresów w dowolnym indeksie w tabeli (np. Kwerendy mniejsze niż, większe niż, zakres i równości) , następnie odfiltruj zwrócony wiersz przez dowolne wyrażenie boolowskie. Można również połączyć wiele niezależnych zestawów wyników razem.

Zdaję sobie sprawę, że to pytanie brzmi jak pytanie o SQL. Nie chcę jednak wymagać, aby magazyn danych wspierający te dane był relacyjną bazą danych, a ja nie chcę, aby koszty związane z ponowną implementacją SQL były samodzielne. Mam też do czynienia tylko z jedną tabelą ze znanym schematem. W końcu nie będą wymagane żadne połączenia. Coś znacznie prostszego byłoby zdecydowanie lepsze.

Edytuj: Rozszerzony opis, aby wyjaśnić niektóre nieporozumienia.

questionAnswers(9)

yourAnswerToTheQuestion