DateTime в качестве ключа - PullRequest
0 голосов
/ 09 января 2012

Я пытаюсь использовать тип datetime в качестве ключа в базе данных b-tree BerkeleyDB.Мои цели:

  1. минимальные издержки для хранения даты и времени
  2. сравнение ключей по дате (для получения диапазона)
  3. разумная скорость

Какпредставить datetime в наиболее компактной форме и использовать алгоритм сравнения ключей bsddb по умолчанию?

Сложно ли сделать это в C и создать небольшое расширение Python для таких задач?Я не обладаю достаточным опытом в C и могу понимать только небольшие фрагменты C (и копировать и вставлять их).

1 Ответ

2 голосов
/ 09 января 2012

Какой диапазон значений даты и времени вас интересует? А какое разрешение по времени?

Как указано в комментарии fge , если вы хотите разрешение в 1 секунду в течение периода, ограниченного 1902-2037, то вы можете использовать 32-разрядное целое число со знаком и количество секунд, прошедших с начала эпохи Unix. , 1970-01-01 00:00:00 +00: 00 (полночь 1 января 1970 года в UTC). Если вам нужен более широкий диапазон, то вам, вероятно, следует использовать 64-разрядное целое число со знаком относительно эпохи Unix. Если вам нужна точность менее секунды, сохраните 32-разрядное целое число со знаком, которое равно числу наносекунд. Обратите внимание, что для отрицательного времени (до 1970 года) дробные секунды также должны быть отрицательными.

Одной из причин для предположения этих представлений является то, что значение можно легко найти через стандартные интерфейсы Unix (POSIX), такие как time() для разрешения в 1 секунду и clock_gettime() для разрешения в наносекундах или gettimeofday() для разрешения в микросекундах.

...