Производительность запросов любого хранилища триплетов, такого как SDB, всегда будет хуже, чем у собственного триплет-хранилища, потому что триплет-хранилище, поддерживаемое SQL, например, SDB, должно скомпилировать SPARQL в SQL, который часто создает ужасно сложные запросы SQL.
Итак, взяв пример, вы попросили сопоставить 9 тройных шаблонов, которые сгенерируют SQL-запрос SELECT, содержащий 9 INNER JOIN
операций, для начала которых потребуется много времени.
Затем вы применяете FILTER
к этим тройным шаблонам, проблема, с которой вы сталкиваетесь, заключается в том, что, если выражение фильтра не очень простое или недостаточно близко к SQL, чтобы преобразовать в него, FILTER
должно быть оценено в Java-код в памяти. На практике это означает, что вы выбираете все возможные события в хранилище триплетов, а затем фильтруете диапазон дат в памяти, используя Java, что всегда замедляет ваш запрос.
Если нет особой причины, по которой вы хотите использовать SDB, я бы действительно посоветовал взглянуть на собственный тройной магазин Jena TDB или TDB2 . Он разработан для того, чтобы делать типы соединений, требуемые для запросов SPARQL, гораздо эффективнее, а способ хранения данных позволяет выполнять более сложные фильтры, такие как диапазон дат, гораздо быстрее.