Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос на собеседовании, СЛОЖНЫЙ! 
V
    Опции темы
Ch0bits
  Дата 16.5.2006, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



На собеседовании в трансконтинентальной корпорации мирового масштаба меня спросили:
Если по запросу передаются данные очень большого размера, то что делать?
Например, как передать на КПК 10Gb данных? 
PM WWW   Вверх
nikitao
Дата 16.5.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 1
Всего: 26



Через протокол FTP вроде как. А прчем тут NET (или это в контексте)? 


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Exception
Дата 16.5.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Модератор: Название темы должно отражать ее суть!

А вообще, не въехал smile 
PM   Вверх
Ch0bits
Дата 16.5.2006, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Цитата(Exception @  16.5.2006,  18:44 Найти цитируемый пост)
А вообще, не въехал

Вот в том то и прикол!  smile 
Как в КПК вообще столько поместится? Допустим мы хотим получить данные из базы данных на удалённом сервере. Устанавливаем соединение, пишем запрос, отправляем на сервер и... он возвращает 10 Gb данных... на КПК!!! Все эти данные надо показать в гриде, но для этого надо иметь широченный канал и огромный размер оперативки на КПК, ведь ADO.NET всё держит в памяти.
Главное что решение этой проблемы ЕСТЬ!  

Это сообщение отредактировал(а) Ch0bits - 16.5.2006, 19:01
PM WWW   Вверх
arilou
Дата 17.5.2006, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(Ch0bits @  16.5.2006,  19:00 Найти цитируемый пост)
Главное что решение этой проблемы ЕСТЬ!  

Не может быть, чтобы показать все сразу. Скорее всего речь идет о том, чтобы эмулировать показ всего, а на самом деле иметь виртуальный список, который подгружает по мере необходимости новые записи с сервера, и выгружает то, что уже не видно. Тада хоть 100 ГБ  smile  


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Ch0bits
Дата 17.5.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



У меня ещё была идея, что данные с сервера можно получить в xml и сохранить их на диске, а потом читать фрагментами с помощью XmlDocument. Но это тоже какая-то сомнительная идея.  smile 
 
PM WWW   Вверх
Exception
Дата 17.5.2006, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Интересно, как ты на диске сохранишь XML в 10 ГБ. 
PM   Вверх
mr.DUDA
Дата 18.5.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Грузить только те записи, которые нужны, TOP-ом по 100 записей за раз. Чтобы выдрать 100 записей из середины таблицы, например после Id=1000, делаем так: SELECT TOP 100 ... WHERE Id > 1000 ORDER BY Id, типа того.

Добавлено @ 11:24 
З.Ы, а вообще-то при больших объёмах данных используют датаридеры вместо датасетов. 


--------------------
user posted image
PM MAIL WWW   Вверх
Ch0bits
Дата 18.5.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



mr.DUDA
О великий учитель хакеров! В очередной раз падаю пред тобой на колени!  smile 
 smile  
PM WWW   Вверх
Softaz
Дата 22.5.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



dataAdapter.Fill(dataSet, (pageNum - 1) * pageSize, pageSize, tableName);

pageSize –число строк на странице; pageNum – номер страницы, начиная с 1.


Либо через TOP (* заменить на нужные поля)

SELECT * FROM tableName WHERE keyName IN
    (SELECT TOP pageSize keyName FROM tableName WHERE keyName IN
        (SELECT TOP pageSize * pageNum keyName FROM tableName
            ORDER BY keyName)
        ORDER BY keyName DESC)
ORDER BY keyName

Только эти вложенные запросы не эффективны при больших таблицах (тысячи строк)

Более подробно можно найти здесь: http://dotnet2themax.com/goto/programmingvbnet.aspx
в книге Programming Microsoft Visual Basic .NET
 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
skyboy
Дата 22.5.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



А можно использовать 
Код

LIMIT <last_number>,<count>
 или это мои глюки? smile Постепенно увеличивать <last_number> и получить по порциям любое количество... 
PM MAIL   Вверх
Exception
Дата 22.5.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Какая разница? Мы ведь за ООП:


Цитата(Softaz @  22.5.2006,  17:05 Найти цитируемый пост)
dataAdapter.Fill(dataSet, (pageNum - 1) * pageSize, pageSize, tableName);


 smile  
PM   Вверх
Softaz
Дата 23.5.2006, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Имелась ввиду перегрузка метода  smile 


Цитата(skyboy @  22.5.2006,  16:51 Найти цитируемый пост)
LIMIT <last_number>,<count>

Пытался сделать (ACCESS) - нету smile А вещь хорошая.
Может альтернатива есть 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
aXisdn
Дата 10.6.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 10.6.2006

Репутация: нет
Всего: нет



Цитата

На собеседовании в трансконтинентальной корпорации мирового масштаба меня спросили:
Если по запросу передаются данные очень большого размера, то что делать?
Например, как передать на КПК 10Gb данных? 


вроде бы курсоры для этого придуманы 
PM MAIL   Вверх
Softaz
Дата 10.6.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Цитата(aXisdn @  10.6.2006,  16:13 Найти цитируемый пост)
На собеседовании в трансконтинентальной корпорации мирового масштаба меня спросили:
Если по запросу передаются данные очень большого размера, то что делать?
Например, как передать на КПК 10Gb данных? 


В MSSQL 2005 появилясь функция Row_Number() для постраничного извлечения данных.

Код

SELECT Row_Number() OVER (ORDER BY OrderDate DESC) AS RowNum,
             SalesOrderID, CustomerID, OrderDate
FROM    Sales.SalesOrderHeader
WHERE RowNum between 101 and 120
ORDER BY OrderDate DESC


 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
arilou
Дата 10.6.2006, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 4
Всего: 61



Цитата(Softaz @  10.6.2006,  18:12 Найти цитируемый пост)
В MSSQL 2005 появилясь функция Row_Number() для постраничного извлечения данных.

Круто, не знал. Спасибо за инфу! 


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Softaz
Дата 10.6.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 16.1.2006

Репутация: 4
Всего: 16



Цитата(arilou @  10.6.2006,  22:40 Найти цитируемый пост)
Круто, не знал. Спасибо за инфу! 

Пожалуйста, только лучше сделать так (т.к. Row_Number() влияет на _итоговые_ строки после выборки, поэтому тот пример малость мертвый):
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[prGetOrders_Paged] @nStartRowNum int, @nRowCount int
    -- Add the parameters for the stored procedure here

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * FROM
        (SELECT   Row_Number() OVER (ORDER BY OrderDate DESC) AS RowNum,    
             SalesOrderID, CustomerID, OrderDate    
        FROM     Sales.SalesOrderHeader    ) O 
        WHERE    RowNum between @nStartRowNum and @nStartRowNum + @nRowCount - 1
        ORDER BY OrderDate DESC
END


Добавлено @ 23:51 
Вот еще несколько интересных функций:

Код

SELECT Row_Number() OVER (ORDER BY City) AS RowNum,
    Rank() OVER (ORDER BY City) AS Rank,
    Dense_Rank() OVER (ORDER BY City) AS DenseRank,
    NTile(3) OVER (ORDER BY City) AS NTile_3,
    NTile(4) OVER (ORDER BY City) AS NTile_4,
    City, StateProvinceCode
FROM Person.Address AS Address
        INNER JOIN Person.StateProvince AS StateProv
        ON Address.StateProvinceID = StateProv.StateProvinceID
WHERE CountryRegionCode = 'US'
 AND StateProvinceCode = 'AZ


Все примеры делались на базе AdventureWorks (входит в MSSQL2005).

Rank() - равным значениям присваиваются одинаковые номера;
Dense_Rank() - тоже, что и Rank() плюс удаляет проб. в посл-ти номеров;
NTile() - разбивка группы строк на одинаковые или близкие части, а если не может, включает большее число строк в группы с меньшими номерами.

Результат того запроса:
Код

1    1    1    1    1    Chandler    AZ 
2    1    1    1    1    Chandler    AZ 
3    1    1    1    1    Chandler    AZ 
4    1    1    1    1    Chandler    AZ 
5    5    2    1    1    Gilbert    AZ 
6    6    3    1    2    Lemon Grove    AZ 
7    6    3    2    2    Lemon Grove    AZ 
8    8    4    2    2    Mesa    AZ 
9    9    5    2    2    Phoenix    AZ 
10    9    5    2    2    Phoenix    AZ 
11    9    5    2    3    Phoenix    AZ 
12    9    5    2    3    Phoenix    AZ 
13    9    5    3    3    Phoenix    AZ 
14    14    6    3    3    Scottsdale    AZ 
15    14    6    3    4    Scottsdale    AZ 
16    16    7    3    4    Surprise    AZ 
17    17    8    3    4    Tucson    AZ 
18    17    8    3    4    Tucson    AZ 
 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.