Конференция "Базы" » Таблицы в памяти [D7, MSSQL]
 
  • yurikon (25.10.11 16:37) [0]
    Добрый день!

    Просветите плиз на счет работы с таблицами в памяти. Например, RXMemoryData - набор данных, который живет в оперативке. Но ведь и любой локальный курсор также создается в оперативной памяти.
    В чем различие?

    С уважением.
  • Savek (25.10.11 16:54) [1]
    Видимо он может и не иметь источника данных
  • sniknik © (25.10.11 17:13) [2]
    один RX... другой ADO... третий Client...
    ты что Пацак дальтоник что ли? © Кин Дза Дза

    > Видимо он может и не иметь источника данных
    все могут.
  • yurikon (25.10.11 17:28) [3]
    КУ :-)

    Поясню задачу. На sql сервере есть таблица, которая накапливает записи в рилтайме. Каждый раз перезапрашивать все таблицу не есть гуд. На клиенте надо только отображать данные, редактирование не требуется.

    Посоветуйте, плиз, какой компонент на клиенте использовать, чтобы туда складировать новые записи с сервера? TClientDataSet?

    С уважением.
  • sniknik © (25.10.11 19:35) [4]
    > которая накапливает записи
    > Каждый раз перезапрашивать все таблицу не есть гуд.
    для новых придется... либо сначала открывать обычно, а дальше самому делать "ручной дозапрос"

    > Посоветуйте, плиз
    хочешь трехзвенку? делай с клиентским, у него провайдер данных подходящий по это дело есть... не хочешь заморачиваться лишним звеном? ну тогда по базе смотри, если mssql то ADO наиболее подходящее.
  • sniknik © (25.10.11 19:39) [5]
    для ADO например есть режим батчапдейт... начальное скачивание гарантировано, дальше как хочешь меняй только апдейт не делай, все в памяти, никакой записи. а для полной гарантии можно еще и от коннекта отключить тогда даже сделав ничего не запишешь, ошибку получишь.
  • Ega23 © (26.10.11 07:38) [6]

    > Посоветуйте, плиз, какой компонент на клиенте использовать,
    >  чтобы туда складировать новые записи с сервера?


    TObjectList<T>
    Серьёзно.
  • yurikon (26.10.11 12:20) [7]
    Приветствую!

    Про TList (TObjectList) думал, не охота с каждым объектом возиться.

    2 sniknik:

    Я сейчас использую ADO. Мне не совсем понятен механизм - как можно использовать адодтасет в качестве таблицы в памяти, без привязки к реальной таблице в базе?

    С уважением, Юрий.
  • Ega23 © (26.10.11 12:26) [8]

    > как можно использовать адодтасет в качестве таблицы в памяти


    Как и любой другой.
    with DataSet do
    begin
     Insert;
     FieldByName(...). := ....;
     ........
     FieldByName(...). := ....;
     Post;
    end;




    Но я бы крайне посоветовал не лениться и и использовать TObjectList<T>
  • Медвежонок Пятачок © (26.10.11 12:30) [9]
    накой здесь датасет вообще?
    только потому что на него можно повесить грид?

    обычный запрос по ключу "где больше чем у меня есть" + стринггрид, стринглист etc.
  • Ega23 © (26.10.11 12:32) [10]

    > + стринггрид, стринглист etc.


    ListView
  • sniknik © (26.10.11 12:57) [11]
    > как можно использовать адодтасет в качестве таблицы в памяти, без привязки к реальной таблице в базе?
    вообще без привязки см. хелп от TClientDataSet-а, принцип тот же. но вообще откуда тогда начальные данные брать?, они же нужны судя по твоему описанию... проще как говорил, загрузить и или не апдейтить изменения, либо вообще "отключить" коннект, чтобы даже возможности такой не было.
  • sniknik © (26.10.11 13:03) [12]
    > накой здесь датасет вообще?
    > только потому что на него можно повесить грид?
    индексы/фильтр/сортировка/объединения

    > стринггрид
    никогда не пользуюсь давно уже... из-за принципа хранения данных, "DB аваре" с их "отображаемым окном" гораздо более логично/удобно/функционально/менее напряжно при более менее большом количестве обрабатываемых данных.
  • Медвежонок Пятачок © (26.10.11 13:08) [13]
    судя по всему у него там просто журнал.
    значит никаких индексов не надо и сортировка по времени задом наперед.
  • sniknik © (26.10.11 13:30) [14]
    > судя по всему у него там просто журнал.
    даже если так, достаточно большой журнал в стринглисте будет тормозить, из-за того, что данные хранятся в прямо в компоненте. да и сортировка в нем будет делаться сдвигом все большего количества строк ("задом наперед" это - последнее в начало вставлять?)

    все одно бы сделал в рекордсете + дбгрид.
  • Sergey13 © (26.10.11 15:24) [15]
    > [3] yurikon   (25.10.11 17:28)
    > Поясню задачу. На sql сервере есть таблица, которая накапливает
    > записи в рилтайме. Каждый раз перезапрашивать все таблицу
    > не есть гуд. На клиенте надо только отображать данные, редактирование
    > не требуется.

    И сколько примерно данных ты желал бы видеть на клиенте? И как часто обновлять? Кто и (главное) как на них смотреть будет?
    Я бы подумал на тему получать агрегатные значения за последние полчаса-час (подобрать эмпирически нужное) и 100-200 самых последних "для примера". И не заморачиваться на изыски в памяти.
  • Yurikon (27.10.11 17:35) [16]
    Доброго дня всем!

    Нюанс вот еще в чем. Данные тянутся с нескольких однотипных таблиц. Я их сейчас объединяю в запросе UNION`ом. К концу дня строк может быть под 500-700 в итоговом запросе. Обновление идет сразу, как только добавилась хоть одна запись в любой таблице (через триггер).

    Видеть надо все записи.
    Поэтому и иду в сторону решения, предложенного Медвежонком - дозапрашивать новые записи и добавлять их DataSet.Append.

    Раньше никогда просто не использовал датасеты без привязки к реальной таблице в базе. :-)

    Спасибо за советы, буду пробовать ADO раз с ним уже работаю.

    С уважением, Юрий.
  • Sergey13 © (28.10.11 10:45) [17]
    > [16] Yurikon   (27.10.11 17:35)
    > К концу дня строк может быть под 500-700 в итоговом запросе.

    Т.е. реально 300-400, а то и меньше? Вы через модем на скорости 4800bps работаете что ли? Было бы о чем заморачиваться и огород городить, ИМХО.
 
Конференция "Базы" » Таблицы в памяти [D7, MSSQL]
Есть новые Нет новых   [134431   +11][b:0][p:0.001]