Где постобработать данные, извлеченные из базы данных - PullRequest
0 голосов
/ 11 июля 2011

из-за проблем с производительностью мы провели рефакторинг для быстрой и грязной реализации нашего доступа к данным (sql).Как и прежде, мы получили доступ к нашим объектам шаг за шагом.Сначала базовые данные, а затем их заполнение некоторыми связанными данными, которые могут быть заполнены другими связанными данными.

На данный момент доступ ко всем данным осуществляется с помощью отдельных операторов SQL, которые являются более сложными, но не слишком большими - с четырьмя вершинами соединений.

Как следствие, данные, которые мы получаем, не являютсяв объектном формате (на самом деле вложенные массивы), например

prop1
prop2 -> prop2a,
         prop2b -> prop2b1
                   prop2b2
prop3 -> prop3a
         prop3b

и , вместо этого все данные «плоские» , например

prop1
prop2a
prop2b1
prop2b2
prop3a
prop3b

My oo-инстинкты говорят мне предварительно обработать эти данные после извлечения и отправить их во внешний интерфейс (html, js - наш единственный клиент) в подобной объекту структуре, как они были отправлены до рефакторинга.С другой стороны, соображения производительности подразумевают обработку только того объема, который действительно необходим, и, если возможно, позволяют клиенту выполнять некоторые виды работ.

Итог : Что в целом лучше / полезная практика здесь?

a) процесс подготовка данных в бэкэнде

б) отправить данные как извлеченные на внешний интерфейс и обработать их там

в) переключиться на архитектуру ORM как можно быстрее

Большое спасибо,

Робсон

1 Ответ

2 голосов
/ 11 июля 2011

Учитывая все приложения, с которыми я работал более 20 лет, производительность всегда на первом месте.Вы всегда должны позволять СУБД выполнять свою работу, используя соединения и все, что вам нужно делать в бэкэнде, чтобы получать только те данные, которые вам нужны (примечание: вам может понадобиться посмотреть «объяснить план» или эквивалентный или добавить индексы в таблицы, чтобылучшая производительность).

В любом случае, извлекайте только те данные, которые вам нужны.Получая больше данных, вы затем добавляете больше данных «по проводам», а затем должны обрабатывать и удалять данные на внешнем интерфейсе.

Что касается ORM - это модель, которой часто следуют, и я тоже твердо верю виспользуя инструмент ORM, но не создавайте объекты только ради создания объектов.Если бы я мог вернуть 100 строк данных именно того, что мне нужно, по сравнению с возвратом 100 связанных объектов, я бы предпочел (по соображениям производительности) вернуть первый.

Мой голос - a).Мне всегда нравится выполнять как можно больше работы с бэкэндом, поскольку в будущем у вас могут быть разные типы клиентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...