Rowkey для контейнера временных рядов GridDB на основе gsCurrentTime () - PullRequest
1 голос
/ 09 июля 2020

У меня есть данные от самых разных датчиков, каждый из которых производит только одну или две строки ввода, поэтому создание нового контейнера для каждого датчика не имеет смысла. Данные поступают в порядке, который не должен быть потерян, поэтому я рассмотрел возможность перечисления входных строк по мере их поступления и присвоения номеров соответственно. Затем я хотел дать дополнительную информацию о промежутке между входными данными. После первой настройки идентификаторов, чтобы они перестали быть последовательными, я теперь рассматриваю временные метки как ключи строк и просто назначаю их при записи данных в строку. В отношении других баз данных я обнаружил упоминания о том, что это может вызвать проблемы, так как теперь данные содержат информацию, которая технически напрямую с ними не связана. Итак, по сути, ключ строки устанавливается следующим образом: gsSetRowFieldByTimestamp(row, 0, gsCurrentTime()); Будет ли уместным использование указанной функции времени для предоставления ключа строки для таймсерии? Любые предсказуемые проблемы, помимо, возможно, очевидной проблемы, которая фактически затрудняет вставку в разрешение gsCurrentTime ()?

1 Ответ

1 голос
/ 15 июля 2020

Во-первых, даже если датчик имеет только несколько столбцов, я считаю, что в схеме данных должен быть один контейнер на устройство. Да, это кажется расточительным, но это способ GridDB. GridDB требуется несколько контейнеров для разделения данных между узлами при использовании кластеризации. Использование многопоточности устранит любые проблемы с производительностью на стороне чтения вашего приложения.

Теперь, если вы настаиваете на использовании единственного контейнера, важно отметить, что ваш сборщик данных должен быть однопоточным, чтобы избежать теоретической строки коллизии ключей и да, используйте gsCurrentTime () или TimestampUtils.current в Java.

...