Я исследовал устройство, чтобы выяснить, могу ли я использовать его для
проект и, пытаясь выбрать между Python и Java, я столкнулся с
неожиданная разница в производительности запросов хранилища данных: от среднего до
большие запросы к хранилищам данных в Python более чем в 3 раза медленнее, чем в
Java.
Мой вопрос: это разница в производительности для запросов хранилища данных
(Python в 3 раза медленнее, чем Java) нормально, или я делаю что-то не так в
мой код Python, который мешает с числами?
Моя сущность выглядит так:
лицо
имя (длина 8)
фамилия (длина 8)
адрес (20)
город (10)
состояние (2)
почтовый индекс (5)
Я заполняю хранилище данных 2000 записями Person с каждым полем
точно длина, указанная здесь, все заполнены случайными данными и без
поля проиндексированы (просто чтобы вставки шли быстрее).
Затем я запрашиваю записи 1k Person из Python (без фильтров, без упорядочивания):
q = datastore.Query("Person")
objects = list(q.Get(1000))
И записи 1k Person из Java (аналогично, без фильтров, без упорядочения):
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
Query q = new Query("Person");
PreparedQuery pq = ds.prepare(q);
// Force the query to run and return objects so we can be sure
// we've timed a full query.
List<Entity> entityList = new ArrayList<Entity>(pq.asList(withLimit(1000)));
С этим кодом код Java возвращает результаты в ~ 200 мс; Питон
код занимает гораздо больше времени, в среднем> 700 мс. Оба приложения находятся на одном
идентификатор приложения (с разными версиями), поэтому они используют одно и то же хранилище данных и должны
быть на ровном игровом поле.
Весь мой код доступен здесь, на случай, если я пропустил какие-либо детали:
http://github.com/greensnark/appenginedatastoretest