При хранении и извлечении сущности хранилища данных, содержащей список кортежей, каков наиболее эффективный способ хранения этого списка?
Когда я сталкивался с этой проблемой, кортежи могут быть любыми: от пар ключ-значение до даты-времени и результатов выборки, до (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()
Преимущества: Нет потери точности, Смущает, но все еще можно просматривать данные в средстве просмотра Datastore, Возможность применять типы, Все выбирается за один раз.
Недостаток: программист должен заархивировать / разархивировать кортежи или тщательно поддерживать порядок в списках.
Метод 3:
Сериализует список кортежей в некоторых усадьбах json, pickle, протокольных буферов и сохраняет его в свойстве blob или text.
Преимущества: Используется с объектами и более сложными объектами, меньше риск пропуска ошибки при совпадении значений кортежа.
Недостатки: Требуется доступ к хранилищу BLOB-объектов и дополнительная выборка ?, Не удается просмотреть данные в средстве просмотра хранилища данных.
Метод 4:
Храните кортежи в другом объекте и храните список ключей.
Преимущества: Более очевидная архитектура. Если объект является представлением, нам больше не нужно хранить две копии данных кортежа.
Недостатки: Требуются две выборки: одна для списка сущностей и ключей и одна для кортежей.
Мне интересно, кто-нибудь знает, какой из них работает лучше всего, и есть ли способ, о котором я не думал?
Спасибо,
Jim