Я реализую класс, который напоминает типичную таблицу базы данных:
- имеет именованные столбцы и безымянные строки
- имеет первичный ключ, по которому я могу ссылаться на строки
- поддерживает поиск и назначение по первичному ключу, а заголовок столбца
- может быть запрошен добавить уникальный или неуникальный индекс для любого из столбцов, что позволяет быстро получить строка (или набор строк), которые имеют заданное значение в этом столбце
- , удаление строки происходит быстро и реализуется как «мягкое удаление»: строка сохраняется физически, но помечена для удаления и не будет появляются в любых последующих операциях поиска
- добавление столбца происходит быстро
- строки добавляются редко
- столбцы редко удаляются
Я решил реализовать класс напрямую, а не использовать оболочку вокруг sqlite.
Какую структуру данных лучше использовать?
В качестве примера, один из подходов, о которых я думал, - это словарь. Его ключи - это значения в столбце первичного ключа таблицы; его значения - это строки, реализованные одним из следующих способов:
В виде списков. Номера столбцов отображаются в заголовках столбцов (с использованием списка для одного направления и карты для другого). Здесь операция поиска сначала преобразует заголовок столбца в номер столбца, а затем находит соответствующий элемент в списке.
Как словари.Заголовки столбцов являются ключами этого словаря.
Не уверен в плюсах и минусах обоих.
Причины, по которым я хочу написать свой собственный код:
- Мне нужно отслеживать удаления строк. То есть в любое время я хочу иметь возможность сообщить, какие строки были удалены и по какой «причине» («причина» передается моему методу удаления).
- Мне нужны отчеты во время индексирования (например, пока создается неуникальный индекс, я хочу проверить определенные условия и сообщить, если они нарушены)
задан Brian Tompsett - 汤莱恩 22 March 2017 в 18:30
поделиться