При хранении и извлечении объекта хранилища данных, который содержит список кортежей, что является наиболее эффективным способом хранения этого списка?
Когда я столкнулся с этой проблемой, кортежи могут быть любыми: от пар значений ключа, до данных datetime и sample, до (x, y) координат.
Количество кортежей варьируется и варьируется от 1 до нескольких сотен.
Сущность, содержащая эти кортежи, должна быть указана быстро/дешево, а значения кортежей не нужно индексировать.
У меня была эта проблема несколько раз, и я решил ее несколькими способами.
Метод 1:
Преобразуйте значения кортежа в строку и объедините их вместе с некоторым разделителем.
def PutEntity(entity, tuples):
entity.tuples = ['_'.join(tuple) for tuple in tuples]
entity.put()
Преимущества: Результаты легко читаются в Datastore Viewer, все извлекается за один раз. Недостатки: Потенциальная потеря точности, программист, необходимый для десериализации/сериализации, больше байтов, необходимых для хранения данных в строчном формате.
Метод 2:
Сохраните каждое значение кортежа в списке и застегните/разархивируйте кортеж.
def PutEntity(entity, tuples):
entity.keys = [tuple[0] for tuple in tuples]
entity.values = [tuple[1] for tuple in tuples]
entity.put()
Преимущества: Отсутствие потери точности, сбивание с толку, но все же возможность просмотра данных в средстве просмотра хранилища данных, возможность принудительного ввода типов, все извлекается за один раз. Недостаток: программисту нужно застегнуть/разархивировать кортежи или тщательно поддерживать порядок в списках.
Способ 3:
Сериализуйте список кортежей в некоторых manor json, pickle, буферах протокола и сохраните их в свойстве blob или text.
Преимущества: Используется с объектами и более сложными объектами, меньше риска ошибки, соответствующей совпадающим значениям кортежа.
Недостатки: Требуется доступ к хранилищу BLOB и дополнительная выборка?, Невозможно просмотреть данные в средстве просмотра хранилища данных.
Способ 4:
Сохраните кортежи в другом объекте и сохраните список ключей.
Преимущества: Более очевидная архитектура. Если объект является представлением, нам больше не нужно хранить две копии данных кортежа.
Недостатки:. Для двух наборов требуется один для списка сущностей и ключей и один для кортежей.
Мне интересно, знает ли кто, кто из них работает лучше, и если есть способ, о котором я не думал?
Спасибо, Джим