реклама на сайте
подробности

 
 
> Быстрый доступ к элементу.
Jenya7
сообщение Oct 22 2017, 08:54
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Я получаю пакеты данных. Эти пакеты я должен хранить в RAM. Глубина хранения не определена но пока что это 512 пакетов.
То есть в RAM я создал массив 512 пакетов.
У каждого пакета есть два поля ID - ID1/ID2. Значения инденцификационных полей варьируются ID1=0-10000, ID2=0-255.
Мне приходит команда - добавь пакет 700/12, удали пакет 700/12, редактируй пакет 700/12. Команда приходит довольно часто - худший случай - каждую милисекунду поэтому время поиска элемента критично.
Проблема в быстром поиске пакета. Сделать хэш таблицу ID1-ID2 <=> индекс - громадная таблица получиться.
Сейчас к чему я пришел - самое оптимальное связанный список.
И тут я вспомнил работу с SQL базами данных - это ж просто праздник какой то. Добавляй, удаляй, редактируй записи сколько влезет и очень быстро.
В принципе это может быть non-SQL база данных - у меня всего одна таблица.
Есть реализация базы данных для эмбедед? кто нибудь видел такое? может даже реализовывал?

P.S. Погуглил эту тему. Вроде как советуют SQLLite. Но я не нашел примеров SQLLite для эмбеддед в С.

Сообщение отредактировал Jenya7 - Oct 22 2017, 09:02
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rst7
сообщение Oct 23 2017, 14:04
Сообщение #2


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



QUOTE
но а+2 не будет адресом элемента a[2].


Что значит не будет? Вы бы почитали про адресную арифметику в Си, для начала.

&(a[2])==a+2, если что.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Oct 23 2017, 14:35
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Rst7 @ Oct 23 2017, 20:04) *
Что значит не будет? Вы бы почитали про адресную арифметику в Си, для начала.

&(a[2])==a+2, если что.

ой. что то я туплю. вы правы.

ну вот я тут накропал. уж не знаю...
Код
#define MESSAGE_ARR_SIZE 128

typedef struct TEST_MESSAGE_S
{
    int id;
    char data[20];
}TEST_MESSAGE;

TEST_MESSAGE messages[MESSAGE_ARR_SIZE8];

int found;
int glob_pos;

int BinarySearch(TEST_MESSAGE a[], int pos, int key, int *found)
{
    int first = 0;
    int last = pos;
    int mid;
    
    if (pos == 0)  //empty array
    {
        *found = 0;
        return 0;
    }
    else if (a[0].id > key)
    {
        *found = 0;
        return 0;
    }
    else if (a[pos - 1].id < key)
    {
        *found = 0;
        return pos;
    }
    
    while (first < last)
    {
        mid = first + (last - first) / 2;

        if (key <= a[mid].id)
            last = mid;
        else
            first = mid + 1;
    }

    if (a[last].id == key)
    {
        *found = 1;
        return last;
    }
    else
    {
                *found = 0;
        return last;
    }
}

void InsertElement(int id, char msg[])
{
    int idx;
    
    idx = BinarySearch(messages, glob_pos, id, &found);
    
    if (found)  //command NEW but the element exists - issue UPDATE
    {
        UpdateElement(idx, msg);
    }
    else //element not found - add one
    {
        memmove(messages+(idx+1), messages+idx, sizeof(TEST_MESSAGE)*glob_pos-1-idx);
        messages[idx].id = id;
        memcpy(messages[idx].data,  msg, sizeof(msg);

        
       if (glob_pos < MESSAGE_ARR_SIZE)
           glob_pos++;
    }
}

void DeleteElement(int id)
{
     int idx;
    
    idx = BinarySearch(messages, glob_pos, id, &found);
    
    if (found)
    {
       memmove(messages+idx, messages+(idx+1), sizeof(TEST_MESSAGE)*glob_pos-1-idx);
      
       if (glob_pos > 0)
           glob_pos--;
    }
}


Сообщение отредактировал Jenya7 - Oct 23 2017, 14:39
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Быстрый доступ к элементу.   Oct 22 2017, 08:54
- - jcxz   Цитата(Jenya7 @ Oct 22 2017, 11:54) Пробл...   Oct 22 2017, 09:09
|- - Jenya7   Цитата(jcxz @ Oct 22 2017, 14:09) Сделайт...   Oct 22 2017, 09:20
- - Rst7   QUOTE И тут я вспомнил работу с SQL базами данных ...   Oct 22 2017, 09:14
|- - jcxz   Цитата(Rst7 @ Oct 22 2017, 12:14) Потому ...   Oct 22 2017, 09:33
|- - Jenya7   Цитата(jcxz @ Oct 22 2017, 14:33) 1. Заче...   Oct 22 2017, 09:48
|- - jcxz   Цитата(Jenya7 @ Oct 22 2017, 12:48) допус...   Oct 22 2017, 09:52
|- - k155la3   Цитата(Jenya7 @ Oct 22 2017, 12:48) . . ....   Oct 22 2017, 10:07
- - Rst7   QUOTE переберите все сочитания 0-10000 и 0-255. Уж...   Oct 22 2017, 09:28
|- - Jenya7   Цитата(Rst7 @ Oct 22 2017, 14:28) Вы не п...   Oct 22 2017, 09:34
- - Rst7   QUOTE 1. Зачем хранить указатели на пакеты? Вместо...   Oct 22 2017, 09:36
|- - Jenya7   Цитата(Rst7 @ Oct 22 2017, 14:36) В данно...   Oct 22 2017, 09:52
|- - jcxz   Цитата(Jenya7 @ Oct 22 2017, 12:52) Допус...   Oct 22 2017, 10:04
|- - Jenya7   Цитата(Rst7 @ Oct 22 2017, 14:59) В данно...   Oct 22 2017, 10:07
|- - jcxz   Цитата(Jenya7 @ Oct 22 2017, 13:07) то ес...   Oct 22 2017, 10:18
|- - Jenya7   Цитата(jcxz @ Oct 22 2017, 15:18) Я уже н...   Oct 22 2017, 10:24
|- - k155la3   Цитата(jcxz @ Oct 22 2017, 13:18) . . . ....   Oct 22 2017, 10:32
|- - Jenya7   Цитата(k155la3 @ Oct 22 2017, 15:32) Это ...   Oct 22 2017, 10:39
|- - jcxz   Цитата(k155la3 @ Oct 22 2017, 13:32) Это ...   Oct 22 2017, 11:15
- - Rst7   QUOTE Допустим у меня массив с ID 3 5 7 13 25 178 ...   Oct 22 2017, 09:59
- - Rst7   QUOTE Исходить надо из случая заполненности всего ...   Oct 22 2017, 10:07
- - Rst7   А вообще-то для полной универсальности топикстарте...   Oct 22 2017, 10:09
|- - Jenya7   Цитата(Rst7 @ Oct 22 2017, 15:09) А вообщ...   Oct 22 2017, 10:16
|- - Rst7   QUOTE (Jenya7 @ Oct 22 2017, 13:16) это к...   Oct 22 2017, 10:47
|- - Jenya7   Цитата(Rst7 @ Oct 22 2017, 15:47) Еще раз...   Oct 22 2017, 10:49
|- - Rst7   QUOTE (Jenya7 @ Oct 22 2017, 13:49) Посмо...   Oct 22 2017, 11:33
|- - Jenya7   Цитата(Rst7 @ Oct 22 2017, 16:33) Ну если...   Oct 22 2017, 11:38
- - Rst7   QUOTE а я понял. ну вот в этом вопрос - насколько ...   Oct 22 2017, 10:59
- - Rst7   QUOTE Да ладно! Какой компилятор? IAR-овский m...   Oct 22 2017, 11:22
|- - jcxz   Цитата(Rst7 @ Oct 22 2017, 14:22) Итого з...   Oct 22 2017, 11:31
- - Jenya7   Rst7, jcxz. Большое вам спасибо. Сделаю так. Вооб...   Oct 22 2017, 11:30
- - Rst7   QUOTE вы говорите на больших размерах можно подума...   Oct 22 2017, 11:41
|- - Jenya7   Цитата(Rst7 @ Oct 22 2017, 16:41) Даже не...   Oct 22 2017, 12:37
- - Jenya7   хотел уточнить такой вопрос для вставки Кодmemmove...   Oct 23 2017, 11:36
- - Rst7   QUOTE получается я должен добавить отступ? Нет. Н...   Oct 23 2017, 13:16
|- - Jenya7   Цитата(Rst7 @ Oct 23 2017, 19:16) Нет. На...   Oct 23 2017, 13:24
- - XVR   Советую отделить id от data и хранить id+индекс в ...   Oct 23 2017, 21:16
|- - Jenya7   Цитата(XVR @ Oct 24 2017, 02:16) Советую ...   Oct 24 2017, 06:23
- - ViKo   Высказываю идею. Пока пакетов меньше 1024 (чисто п...   Oct 24 2017, 07:43
- - Jenya7   Результаты такие. При добавлении элемента я вылета...   Oct 24 2017, 07:44
|- - ViKo   Цитата(Jenya7 @ Oct 24 2017, 10:44) так я...   Oct 24 2017, 08:05
- - skripach   Цитата(Jenya7 @ Oct 22 2017, 11:54) масси...   Oct 24 2017, 07:55
- - Jenya7   Нашел проблемку. Функция вставки в причесанном вар...   Oct 24 2017, 08:41
- - Rst7   Ну правильно вот так CODEmemcpy(messages...   Oct 24 2017, 10:09
|- - Jenya7   Цитата(Rst7 @ Oct 24 2017, 15:09) Ну прав...   Oct 24 2017, 11:12
- - Rst7   QUOTE не совсем понимаю. memmove переносит из адре...   Oct 24 2017, 11:41
|- - Jenya7   Цитата(Rst7 @ Oct 24 2017, 16:33) Вы пере...   Oct 24 2017, 11:43
- - Rst7   QUOTE ммм...а можете показать как. я не понимаю на...   Oct 24 2017, 11:57
|- - Jenya7   Цитата(Rst7 @ Oct 24 2017, 16:57) Обновит...   Oct 24 2017, 12:07
- - Rst7   Ну и чисто эстетический момент. Лично меня вымораж...   Oct 24 2017, 12:10
|- - Jenya7   Цитата(Rst7 @ Oct 24 2017, 17:10) Ну и чи...   Oct 24 2017, 12:17
- - Jenya7   по моему в КодTEST_MESSAGE *AllocMessage(void...   Oct 26 2017, 07:34
- - Rst7   QUOTE Элементы вставляются но p->data всех элем...   Oct 26 2017, 08:00
|- - Jenya7   Цитата(Rst7 @ Oct 26 2017, 14:00) Ээээ, т...   Oct 26 2017, 09:23
|- - Rst7   QUOTE (Jenya7 @ Oct 26 2017, 12:23) Да. Н...   Oct 26 2017, 09:47
|- - Jenya7   Цитата(Rst7 @ Oct 26 2017, 15:47) Я так з...   Oct 26 2017, 10:39
- - Rst7   Я не понимаю, что Вы смотрите. Все поля msg_p[i].p...   Oct 26 2017, 11:29
- - Jenya7   Цитата(Rst7 @ Oct 26 2017, 16:29) Что печ...   Oct 26 2017, 11:36


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 14:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01443 секунд с 7
ELECTRONIX ©2004-2016