Постраничные результаты при выборе данных из 2 баз данных - PullRequest
0 голосов
/ 13 мая 2011

Привет
У меня есть одна веб-служба, подключенная к одной БД, у которой есть таблица с именем клиентов, которая содержит некоторые данные.
У меня есть другая веб-служба, подключенная к другой БД, у которой есть таблица с именем clientdetails, у которой есть некоторые другие данные..
Мне нужно вернуть постраничный список клиентов, и каждый клиентский объект содержит информацию из обеих таблиц.
Но у меня есть проблема.
Критерии поиска должны применяться к обеим таблицам.
Таким образом, в основном в таблице клиентов у меня могут быть свойства:
cprop1, cprop2
в таблице clientdetails, у меня может быть cdprop1, cdprop2
, и мои критерии поиска могут быть cporp1 = что-то, cdprop2 = что-то еще

Я вызываю первый веб-сервис и отправляю ему критерии cporp1 = что-то
И он возвращает некоторую информацию, а затем я вызываю метод во втором веб-сервисе, но если мне нужно вернуть, скажем, 10 элементов на странице икритерии второго веб-сервиса применяются к 10 элементам, выбранным первым веб-сервисом (cdprop2 = что-тоиначе) тогда у меня могут остаться 8 предметов или их вообще нет.
Так что мне делать в этом случае?
Как я могу убедиться, что я всегда получаю правильное количество предметов (это столько же, сколькопользователь говорит, что хочет на страницу)?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Я обнаружил, что в подобных случаях лучше использовать не первичные ключи идентификации, а первичные ключи со сгенерированными значениями во второй базе данных (сгенерированной в первой базе данных).
Что касается поиска, вы должны искать первые 1000 элементов, которые соответствуют вашим критериям из первой базы данных, пересекают их с первыми 1000, которые соответствуют заданным критериям из второй базы данных, и возвращать необходимое количество элементов из этого пересечения.
Ваши запросы никогда не должны возвращать неограниченное количество элементов, так что 1000 должны делать. Число может быть больше или меньше, конечно.

0 голосов
/ 13 мая 2011

Пока у вас нет обоих ответов, вы не знаете, сколько записей вам нужно отобразить.

Вы не знаете, какой тип доступа к базе данных вы используете, вы подразумеваете, что запрашиваете «N записей, соответствующих критерию X», где N установлено равным 10. В некоторых механизмах доступа к БД вы можете запроситьвсе соответствующие записи, а затем перемещать «курсор» по набору, поэтому вам не нужно устанавливать какую-либо верхнюю границу - мы предполагаем, что БД позаботится об эффективном управлении ресурсами для такого запроса.

Если выесли вы не можете этого сделать, то вам нужно иметь возможность повторно просмотреть первую базу данных с запросом следующих 10 записей, повторять до тех пор, пока, наконец, у вас не заполнится страница или не будет найдено больше записей.Это требует, чтобы у вас был какой-то способ задать запрос для «следующих 10».

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

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