On Fri, Aug 25, 2023 at 3:23 PM Ryan Blue <b...@tabular.io> wrote:

> I don't think that we should introduce nanosecond precision types without
> at least supporting both timestamp and timestamptz. I'm not sure whether
> nanosecond time should be supported.
>

SGTM; this seems to be the most agreeable part of the proposal.

For the primary keys, what is the use case you're trying to solve? Do your
> tables allow null values in primary keys? If so, what is the purpose of it?
>

InfluxDB is a schema-on-write database; tables and columns are created by
writing to them. Constraints:
- Every table has exactly one timestamp[nanos] column, and is required.
- "Field" columns are typed (int, uint, float, string, bool). These are the
time series data that vary with time. At least one field value is required,
per row.
- "Tag" columns are only strings. These are identifying data - used for
grouping, filtering. Tag values are not required, whether tag columns are
present or not.

Primary keys are composed of **non-null tags**, plus timestamp. For
example, these rows:

timestamp | tag A | tag B | field(int) F
09:25 | null | null | 1
09:25 | "foo" | null | 1
09:25 | "foo" | "bar" | 1
10:25 | "foo" | "bar" | 1

have these primary keys:

(09:25)
(09:25,A="foo")
(09:25,A="foo",B="bar")
(10:25,A="foo",B="bar")

InfluxDB uses these primary keys in two contexts:
- deduplication in query pipelines
- compaction (mitigate performance impact of query-time deduplication)

-- 
Jacob Marble
🇺🇸 🇺🇦

Reply via email to