Rowkey для контейнера временных рядов GridDB на основе gsCurrentTime()
Я получаю данные от самых разных датчиков, каждый из которых производит только одну или две строки ввода, поэтому создание нового контейнера для каждого датчика не имеет смысла. Данные поступают в порядке, который не должен быть потерян, поэтому я рассмотрел возможность перечисления входных строк по мере их поступления и присвоения номеров соответственно. Затем я хотел дать дополнительную информацию о промежутке между входными данными. После первой настройки идентификаторов, которые больше не будут последовательными, я теперь рассматриваю временные метки как ключи строк и просто назначаю их при записи данных в строку. В отношении других баз данных я обнаружил упоминания о том, что это может вызвать проблемы, так как теперь данные содержат информацию, которая технически напрямую с ними не связана.
Итак, по сути, rowkey устанавливается следующим образом:gsSetRowFieldByTimestamp(row, 0, gsCurrentTime());
Будет ли уместным использование указанной функции времени для предоставления ключа строки для временного ряда? Есть ли какие-либо предсказуемые проблемы, помимо, возможно, очевидной проблемы, которая эффективно затрудняет вставку в разрешение gsCurrentTime()?
1 ответ
Во-первых, даже если у датчика есть только несколько столбцов, я считаю, что схема данных все равно должна быть одним контейнером на устройство. Да, это кажется расточительным, но это способ GridDB. GridDB требуется несколько контейнеров для разделения данных между узлами при использовании кластеризации. Использование мультизапроса устранит любые проблемы с производительностью на стороне чтения вашего приложения.
Теперь, если вы настаиваете на использовании единственного контейнера, важно отметить, что ваш сборщик данных должен быть однопоточным, чтобы избежать теоретических конфликтов ключей строк, и да, используйте gsCurrentTime() или TimestampUtils.current в Java.