|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
добрый день. Суть задачи такова нужно хранить большое число записей (от 1-10 млн). каждая запись представляет собой 2 поля 1. ключ (уникальный) 20 - байт 2. значение 1 байт необходимые операции 1. получение значения по ключу. (чаще всего. поэтому необходимо "очень-быстро") 2. добавление/удаление/обновление записей. (намного реже, примерно в 10000 раз реже). в серверном решении задача решена в лоб, таблица в mssql server. + кэш на уровне приложения. теперь нужно решить эту же задачу при некоторых ограничениях. мало памяти, + мало оперативной памяти. + небольшая производительность. тоесть нужно максимально эффективно использовать память, и не потерять в производительности. mssql server доступ только Compact версия. вообще на сколько реально реализовать данную задачу. и в каком направлении думать? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:19 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123, Dictionary? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:20 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
Читать про nosql базы данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:23 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
pationnoob123, Dictionary? на десктопе так и работает кэш. а тут ограничение в 256 мб. памяти. тоесть фактически надо хранить данные почти без оверхеда. ну и кроме хранения в RAM нужно их и постоянно хранить на диске. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:29 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123а тут ограничение в 256 мб. памяти Откуда такие ограничения? А то я ведь могу захотеть и хранение 1 млрд записей в памяти, при условии, что у меня есть только 1 Мб RAM. Давай к проблеме походить более практично. Надо хранить? Закупай память и храни. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:33 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
МСУnoob123а тут ограничение в 256 мб. памяти Откуда такие ограничения? А то я ведь могу захотеть и хранение 1 млрд записей в памяти, при условии, что у меня есть только 1 Мб RAM. Давай к проблеме походить более практично. Надо хранить? Закупай память и храни. ну тут то ограничения реальные. 5млн записей без оверхеда в 100мб уложатся. ограничения связаны с тем что девайс является мобильным устройством и памяти туда не закупишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:36 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123ну тут то ограничения реальные. 5млн записей без оверхеда в 100мб уложатся. Не факт, зависит от типа данных. noob123ограничения связаны с тем что девайс является мобильным устройством и памяти туда не закупишь. Ты это еще под конец дискуссии сказал бы. P.S. Осталось вызвать гадалку, она на кофейной гуще нагадает операционную систему мобильного устройства и еще кой чего полезного поведает по задаче. А то из автора нужно информацию клещами вытаскивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 12:57 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
А выполнение подобного кода Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
для вашей таблицы на КПК занимает слишком много времени? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:08 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
МСУnoob123ну тут то ограничения реальные. 5млн записей без оверхеда в 100мб уложатся. Не факт, зависит от типа данных. noob123ограничения связаны с тем что девайс является мобильным устройством и памяти туда не закупишь. Ты это еще под конец дискуссии сказал бы. P.S. Осталось вызвать гадалку, она на кофейной гуще нагадает операционную систему мобильного устройства и еще кой чего полезного поведает по задаче. А то из автора нужно информацию клещами вытаскивать. тип данных не важен. размер указан в первом посте. все полезные данные занимают 21 байт (20 - ключ, 1 - значение). при желании можно уложится в 13. так что 5кк записей (без оверхеда) ~100мб. операционная система windows mobile. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:34 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
sutniА выполнение подобного кода Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
для вашей таблицы на КПК занимает слишком много времени? надо проводить тесты, но не думаю что есть смысл вообще использовать бд. (так как даже на десктопной версии скорость не устраивает, для того и придумал кэш). я вообще не уверен что sql server compact не загнется на 5млн записей. да и размер мне кажется будет нехилый у файла базы. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:36 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123 Ну так а CE чем не угодил? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:47 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123добрый день. Суть задачи такова нужно хранить большое число записей (от 1-10 млн). каждая запись представляет собой 2 поля 1. ключ (уникальный) 20 - байт 2. значение 1 байт необходимые операции 1. получение значения по ключу. (чаще всего. поэтому необходимо "очень-быстро") 2. добавление/удаление/обновление записей. (намного реже, примерно в 10000 раз реже). в серверном решении задача решена в лоб, таблица в mssql server. + кэш на уровне приложения. теперь нужно решить эту же задачу при некоторых ограничениях. мало памяти, + мало оперативной памяти. + небольшая производительность. тоесть нужно максимально эффективно использовать память, и не потерять в производительности. mssql server доступ только Compact версия. вообще на сколько реально реализовать данную задачу. и в каком направлении думать? если попробовал CE+индекс и не подошло, то рассмотри такой вариант у тебя поиск частый, вставка редко. поиск в сортированной последовательности за log2(N) методом деления пополам. и это хорошо, можно не тратиться на индекс в твоем случае да еще и хранить можно в файле эту последовательность (при поиске методом попооаи используй seek, у тебя же длина записи известна 21 байт). плохо только для вставки/удаления - большое время. чтобы его сделать меньше храни последовательность в n сортированных файлах по q записей. и метаданные с информацией имя файла + диапазон ключей в нем. в этом случае выставка достаточно быстрая, поиск тоже быстрый. технической информации мизер - только метаданные о файлах. суммарный добьемся файлов (20+1) * число записей. при твоих условиях 1-10 млн, получаем от 20 до 200 Mb ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:52 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123sutniА выполнение подобного кода Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
для вашей таблицы на КПК занимает слишком много времени? надо проводить тесты, но не думаю что есть смысл вообще использовать бд. (так как даже на десктопной версии скорость не устраивает, для того и придумал кэш). я вообще не уверен что sql server compact не загнется на 5млн записей. да и размер мне кажется будет нехилый у файла базы. вы уникальный индекс использовали? скорость поиска в этом случае таааак меееедленно будет падать с ростом числа записей, что даже слов нет как описать. а 5 млн это такие копейки что и говорить не о чем в случае полноценной субд. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 13:56 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123, какова примерная структура уникального ключа --цифры --буквы --смесь ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:00 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
Lord Britishnoob123пропущено... надо проводить тесты, но не думаю что есть смысл вообще использовать бд. (так как даже на десктопной версии скорость не устраивает, для того и придумал кэш). я вообще не уверен что sql server compact не загнется на 5млн записей. да и размер мне кажется будет нехилый у файла базы. вы уникальный индекс использовали? скорость поиска в этом случае таааак меееедленно будет падать с ростом числа записей, что даже слов нет как описать. а 5 млн это такие копейки что и говорить не о чем в случае полноценной субд. использовал. 400операций/с на выборке. про 5 миллионов согласен. (для полноценной). но тут то CE. вот как вы выше описали, примерно так я и думал.. ток эт бы еще реализовать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:03 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
к предыдущему сообщению. "горячие" файлы (их будет мало и они мелкие) можно хранить в оперативке телефона, так искать будет быстрее. что-то вроде кэша. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:03 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКАnoob123, какова примерная структура уникального ключа --цифры --буквы --смесь байты. но по факту HEX число. но удобнее хранить в byte[20] ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:04 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123Lord Britishпропущено... вы уникальный индекс использовали? скорость поиска в этом случае таааак меееедленно будет падать с ростом числа записей, что даже слов нет как описать. а 5 млн это такие копейки что и говорить не о чем в случае полноценной субд. использовал. 400операций/с на выборке. про 5 миллионов согласен. (для полноценной). но тут то CE. вот как вы выше описали, примерно так я и думал.. ток эт бы еще реализовать :) с реализацией не должно быть трудностей, у вас то приложение на трубе, я так понимаю только один поток, транзакций не надо. пиши не хочу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:07 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
+ еще несколько оптимизаций. если сортированные будут довольно большими (параметр Q число записай на файл) может быть выгоднее Seek, а если файлы маленькие, то может быть выгоднее считать весь в память и найти, а если совсем маленькие, то вместо деления пополам может быть выгоднее пройтись тупым последовательным поиском и т. д.. никогда не писал под Mobile и т. п.. может быть выгоднее либу написать на C++/C (чтобы выкинуть частые managed->unmanaged вызовы, которые под капотом при seek/read и т. п..) а в основное приложение впихнуть через pinvoke. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:34 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
Автор так и не обрисовал аргументы против CE. Они будут? http://technet.microsoft.com/ru-ru/library/ms172984(v=sql.90).aspx Методы повышения производительности при обработке запросов (SQL Server Compact Edition) Создание эффективных индексов является одним из наиболее действенных способов повышения производительности при обработке запросов. Применение эффективных индексов помогает находить данные с использованием меньшего числа операций ввода-вывода и объема системных ресурсов. Чтобы создавать эффективные индексы, необходимо знать методику использования данных, типы запросов и частоту их исполнения, а также понимать, каким образом обработчик запросов использует индексы для ускорения поиска данных. Чтобы принять правильное решение о создании индексов, следует проанализировать важные запросы, исполнение которых оказывает наибольшее влияние на производительность, с целью создания индексов, ускоряющих выполнение именно этих запросов. После создания индекса необходимо выполнить запрос снова и оценить изменение производительности. Если производительность не повысилась, индекс следует удалить. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:38 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
"... а в основное приложение впихнуть через pinvoke. " имеется ввиду уже высокоуровневые insert, update, delete, getbyid ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 14:38 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
noob123байты. но по факту HEX число. но удобнее хранить в byte[20] кому удобнее? (речь вроде о скорости идёт) Разрядность ключа(бит)? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 15:02 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
На СЕ медленные Insert/Update операции. Поиск (особенно с индексом) быстрый. Но если есть сомнения в связи с объёмом - попробуйте sqlite. Есть для .Net CE версия. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 15:13 |
|
Хранение большого кол-ва данных
|
|||
---|---|---|---|
#18+
Изопропилnoob123байты. но по факту HEX число. но удобнее хранить в byte[20] кому удобнее? (речь вроде о скорости идёт) Разрядность ключа(бит)? так вроде логично что строку вида "FFFFFFFF" удобнее хранить как массив байт а не как строку. во первых размер в 2 раза меньше. 20 байт а не 40. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2013, 15:15 |
|
|
start [/forum/topic.php?fid=20&msg=38145830&tid=1405184]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 313ms |
total: | 467ms |
0 / 0 |