powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Хранение большого кол-ва данных
25 сообщений из 29, страница 1 из 2
Хранение большого кол-ва данных
    #38145795
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день.
Суть задачи такова нужно хранить большое число записей (от 1-10 млн).
каждая запись представляет собой 2 поля
1. ключ (уникальный) 20 - байт
2. значение 1 байт

необходимые операции
1. получение значения по ключу. (чаще всего. поэтому необходимо "очень-быстро")
2. добавление/удаление/обновление записей. (намного реже, примерно в 10000 раз реже).

в серверном решении задача решена в лоб, таблица в mssql server. + кэш на уровне приложения.

теперь нужно решить эту же задачу при некоторых ограничениях.
мало памяти, + мало оперативной памяти. + небольшая производительность.
тоесть нужно максимально эффективно использовать память, и не потерять в производительности.
mssql server доступ только Compact версия.

вообще на сколько реально реализовать данную задачу. и в каком направлении думать?
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145800
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123,

Dictionary?
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145809
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читать про nosql базы данных.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145823
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pationnoob123,

Dictionary?

на десктопе так и работает кэш.

а тут ограничение в 256 мб. памяти.
тоесть фактически надо хранить данные почти без оверхеда.
ну и кроме хранения в RAM нужно их и постоянно хранить на диске.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145830
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123а тут ограничение в 256 мб. памяти
Откуда такие ограничения? А то я ведь могу захотеть и хранение 1 млрд записей в памяти, при условии, что у меня есть только 1 Мб RAM. Давай к проблеме походить более практично. Надо хранить? Закупай память и храни.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145840
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУnoob123а тут ограничение в 256 мб. памяти
Откуда такие ограничения? А то я ведь могу захотеть и хранение 1 млрд записей в памяти, при условии, что у меня есть только 1 Мб RAM. Давай к проблеме походить более практично. Надо хранить? Закупай память и храни.

ну тут то ограничения реальные. 5млн записей без оверхеда в 100мб уложатся.
ограничения связаны с тем что девайс является мобильным устройством и памяти туда не закупишь.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145881
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123ну тут то ограничения реальные. 5млн записей без оверхеда в 100мб уложатся.
Не факт, зависит от типа данных.

noob123ограничения связаны с тем что девайс является мобильным устройством и памяти туда не закупишь.
Ты это еще под конец дискуссии сказал бы.

P.S. Осталось вызвать гадалку, она на кофейной гуще нагадает операционную систему мобильного устройства и еще кой чего полезного поведает по задаче. А то из автора нужно информацию клещами вытаскивать.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145909
sutni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А выполнение подобного кода
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SqlCeConnection conn = null;
SqlCeDataReader rdr = null;
SqlCeCommand cmd = null;
conn = new SqlCeConnection(CDatabase.ConnString);
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "SELECT val FROM [MyTable] where [id]=@id";
cmd.Parameters.AddWithValue("@id", m_Id);
int count = Int32.Parse(cmd.ExecuteScalar().ToString());
...


для вашей таблицы на КПК занимает слишком много времени?
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145955
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
МСУnoob123ну тут то ограничения реальные. 5млн записей без оверхеда в 100мб уложатся.
Не факт, зависит от типа данных.

noob123ограничения связаны с тем что девайс является мобильным устройством и памяти туда не закупишь.
Ты это еще под конец дискуссии сказал бы.

P.S. Осталось вызвать гадалку, она на кофейной гуще нагадает операционную систему мобильного устройства и еще кой чего полезного поведает по задаче. А то из автора нужно информацию клещами вытаскивать.

тип данных не важен. размер указан в первом посте.
все полезные данные занимают 21 байт (20 - ключ, 1 - значение). при желании можно уложится в 13.
так что 5кк записей (без оверхеда) ~100мб.

операционная система windows mobile.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145960
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sutniА выполнение подобного кода
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SqlCeConnection conn = null;
SqlCeDataReader rdr = null;
SqlCeCommand cmd = null;
conn = new SqlCeConnection(CDatabase.ConnString);
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "SELECT val FROM [MyTable] where [id]=@id";
cmd.Parameters.AddWithValue("@id", m_Id);
int count = Int32.Parse(cmd.ExecuteScalar().ToString());
...


для вашей таблицы на КПК занимает слишком много времени?

надо проводить тесты, но не думаю что есть смысл вообще использовать бд. (так как даже на десктопной версии скорость не устраивает, для того и придумал кэш).
я вообще не уверен что sql server compact не загнется на 5млн записей. да и размер мне кажется будет нехилый у файла базы.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145985
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123
Ну так а CE чем не угодил?
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38145998
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146006
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123sutniА выполнение подобного кода
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SqlCeConnection conn = null;
SqlCeDataReader rdr = null;
SqlCeCommand cmd = null;
conn = new SqlCeConnection(CDatabase.ConnString);
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "SELECT val FROM [MyTable] where [id]=@id";
cmd.Parameters.AddWithValue("@id", m_Id);
int count = Int32.Parse(cmd.ExecuteScalar().ToString());
...


для вашей таблицы на КПК занимает слишком много времени?

надо проводить тесты, но не думаю что есть смысл вообще использовать бд. (так как даже на десктопной версии скорость не устраивает, для того и придумал кэш).
я вообще не уверен что sql server compact не загнется на 5млн записей. да и размер мне кажется будет нехилый у файла базы.

вы уникальный индекс использовали? скорость поиска в этом случае таааак меееедленно будет падать с ростом числа записей, что даже слов нет как описать. а 5 млн это такие копейки что и говорить не о чем в случае полноценной субд.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146019
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123,

какова примерная структура уникального ключа

--цифры
--буквы
--смесь
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146027
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lord Britishnoob123пропущено...


надо проводить тесты, но не думаю что есть смысл вообще использовать бд. (так как даже на десктопной версии скорость не устраивает, для того и придумал кэш).
я вообще не уверен что sql server compact не загнется на 5млн записей. да и размер мне кажется будет нехилый у файла базы.

вы уникальный индекс использовали? скорость поиска в этом случае таааак меееедленно будет падать с ростом числа записей, что даже слов нет как описать. а 5 млн это такие копейки что и говорить не о чем в случае полноценной субд.

использовал. 400операций/с на выборке. про 5 миллионов согласен. (для полноценной). но тут то CE.

вот как вы выше описали, примерно так я и думал.. ток эт бы еще реализовать :)
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146029
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к предыдущему сообщению. "горячие" файлы (их будет мало и они мелкие) можно хранить в оперативке телефона, так искать будет быстрее. что-то вроде кэша.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146034
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАnoob123,

какова примерная структура уникального ключа

--цифры
--буквы
--смесь

байты. но по факту HEX число.
но удобнее хранить в byte[20]
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146040
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123Lord Britishпропущено...


вы уникальный индекс использовали? скорость поиска в этом случае таааак меееедленно будет падать с ростом числа записей, что даже слов нет как описать. а 5 млн это такие копейки что и говорить не о чем в случае полноценной субд.

использовал. 400операций/с на выборке. про 5 миллионов согласен. (для полноценной). но тут то CE.

вот как вы выше описали, примерно так я и думал.. ток эт бы еще реализовать :)

с реализацией не должно быть трудностей, у вас то приложение на трубе, я так понимаю только один поток, транзакций не надо. пиши не хочу :)
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146106
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ еще несколько оптимизаций.

если сортированные будут довольно большими (параметр Q число записай на файл) может быть выгоднее Seek, а если файлы маленькие, то может быть выгоднее считать весь в память и найти, а если совсем маленькие, то вместо деления пополам может быть выгоднее пройтись тупым последовательным поиском и т. д..

никогда не писал под Mobile и т. п.. может быть выгоднее либу написать на C++/C (чтобы выкинуть частые managed->unmanaged вызовы, которые под капотом при seek/read и т. п..) а в основное приложение впихнуть через pinvoke.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146122
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор так и не обрисовал аргументы против CE. Они будут?

http://technet.microsoft.com/ru-ru/library/ms172984(v=sql.90).aspx Методы повышения производительности при обработке запросов (SQL Server Compact Edition)
Создание эффективных индексов является одним из наиболее действенных способов повышения производительности при обработке запросов. Применение эффективных индексов помогает находить данные с использованием меньшего числа операций ввода-вывода и объема системных ресурсов.

Чтобы создавать эффективные индексы, необходимо знать методику использования данных, типы запросов и частоту их исполнения, а также понимать, каким образом обработчик запросов использует индексы для ускорения поиска данных.

Чтобы принять правильное решение о создании индексов, следует проанализировать важные запросы, исполнение которых оказывает наибольшее влияние на производительность, с целью создания индексов, ускоряющих выполнение именно этих запросов. После создания индекса необходимо выполнить запрос снова и оценить изменение производительности. Если производительность не повысилась, индекс следует удалить.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146123
Lord British
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"... а в основное приложение впихнуть через pinvoke. "

имеется ввиду уже высокоуровневые

insert, update, delete, getbyid
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146170
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123байты. но по факту HEX число.
но удобнее хранить в byte[20]
кому удобнее? (речь вроде о скорости идёт)

Разрядность ключа(бит)?
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146195
sutni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На СЕ медленные Insert/Update операции. Поиск (особенно с индексом) быстрый.
Но если есть сомнения в связи с объёмом - попробуйте sqlite. Есть для .Net CE версия.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146198
noob123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Изопропилnoob123байты. но по факту HEX число.
но удобнее хранить в byte[20]
кому удобнее? (речь вроде о скорости идёт)

Разрядность ключа(бит)?

так вроде логично что
строку вида "FFFFFFFF" удобнее хранить как массив байт а не как строку.
во первых размер в 2 раза меньше. 20 байт а не 40.
...
Рейтинг: 0 / 0
Хранение большого кол-ва данных
    #38146557
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noob123,

в огороде бузина, в Киеве - дядька.

ключ BINARY(20) ? Распределение - равномерное?
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Хранение большого кол-ва данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]