Повышение скорости при загрузке списка из веб-службы - PullRequest
1 голос
/ 02 августа 2010

Это продолжение этого вопроса :Проблема проста.Мне нужно вызвать методы из веб-службы REST, которая управляет несколькими таблицами.Одна таблица представляет собой таблицу снимков, которая содержит записи с огромными файлами XML.Каждый файл XML в основном является резервной копией из другой базы данных.Этот резервный XML-файл затем отправляется клиентам, которые используют данные в качестве информации только для чтения в другом продукте.По сути, данные в XML представляют собой списки компаний, продуктов, бизнес-правил и тому подобное.И нет, эти клиенты большую часть времени работают в автономном режиме, поэтому они не могут получить данные в реальном времени.Ходить по списку снимков довольно сложно: XMLData.Snapshots.Skip(N).Take(1).First();, но работает очень хорошо.Это ответ предыдущего Q.Но есть еще три списка данных, по которым мне нужно пройти.Это называется Изменения, Ошибки и Сообщения.Они содержат (1) изменения данных, (2) ошибки, которые произошли во время изменения данных и (3) общие сообщения.Все эти записи связаны с записью снимка.Таким образом, один снимок может содержать несколько изменений, ошибок и сообщений.Я до сих пор не могу получить доступ к серверному коду, но, так как есть сервис REST, обернутый вокруг структуры сущностей, представляющий большую часть функциональности, я все еще могу использовать эту службу.(И эта служба доступна только внутри сети, в Интранете. Это то, с чем мне приходится работать. И хотя списки изменений, ошибок и сообщений относительно невелики, снимки все еще огромны.


Проблема в том, что теперь я хочу сгенерировать на стороне клиента отчет об изменениях, ошибках и сообщениях, но без группировки их по снимку! Они должны быть сгруппированы по дате. Но в каждой записи также должен отображаться заголовокснимок, который вызывает у меня невероятные головные боли ...Проходя, например, через Изменения с помощью обычной инструкции foreach, я могу загрузить данные моментального снимка, используя XMLData.LoadProperty(Change, "Snapshots");, но поскольку сама запись моментального снимка обычно составляет около 300 МБ, это просто замедляет процесс сканирования.(Всего таких записей десятки тысяч!) Поэтому мне нужно более быстрое решение, без необходимости изменять код сервера.Какие-либо предложения?Да ладноМодификация сервера будет правильным способом, но это невозможно.Он находится в производстве, и этот список не настолько важен, чтобы требовать обновления сервера.В принципе, мне не разрешено изменять какой-либо серверный код на данный момент.(Но они все еще хотят этот список.)


Некоторая дополнительная сложность ... Приложение, над которым я работаю, должно запускаться раз в неделю или в месяц.Но с текущим количеством записей, я полагаю, что потребуется более двух дней, чтобы закончить.Сами данные будут обновляться несколько раз каждый рабочий день, а на сервере примерно каждую неделю создаются снимки.Ошибки могут всегда генерироваться, когда пользователи начинают просматривать сайт, на котором хранятся данные, но в целом будет около 50 изменений и 4 ошибки в неделю, а также несколько сообщений, когда сервер отключается и снова работает или когда создаются моментальные снимки.

Ответы [ 2 ]

1 голос
/ 02 августа 2010

Один из вариантов - сохранить другой файл данных на стороне клиента, содержащий те же данные, но упорядоченные по дате. Это может быть сгенерировано и обновлено асинхронно в отдельном потоке, чтобы не влиять на ваше основное приложение. Всякий раз, когда пользователь хочет сгенерировать rport, вам нужно проверить, доступен ли файл данных для чтения, и, возможно, заблокировать его.

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

1 голос
/ 02 августа 2010

Можете ли вы сделать другой веб-сервис кэширующим данные из первого или доступ к тому же источнику данных?

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