powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си. Освободить память 2-мерного сторкового массива
25 сообщений из 308, страница 7 из 13
Си. Освободить память 2-мерного сторкового массива
    #40130805
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ
mayton
Кстати задолго до 100500 сетевых коннектов количество портов на 1 ethernet интерфейс
резко закончится ... поэтому тут уж или Ишак сдохнет или Султан.

Я-бы предложил внести в топик более близкое к задаче число.

100? 1000?


ну в райное 100-1000 в итоге думаю и будет.

Хорошо. Пускай пессиместично это будет до 1000 соединений с 1 клиента.

Но здесь у меня (к моему ужасу) возникает другой вопрос. Как ты будешь их координировать?
Нужно-ли сводить их результаты в 1 точку? Просто здесь нужна либо много unix-processes или threads.

Беря во внимание что ты только недавно разбирался со строками. Тебе дальше надо разбираться
с темой еще более сложной.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130810
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton

Но здесь у меня (к моему ужасу) возникает другой вопрос. Как ты будешь их координировать?
Нужно-ли сводить их результаты в 1 точку? Просто здесь нужна либо много unix-processes или threads.

Беря во внимание что ты только недавно разбирался со строками. Тебе дальше надо разбираться
с темой еще более сложной.



Да и к моему ужасу тоже :-(((
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130829
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonТебе дальше надо разбираться с темой еще более сложной.

Да, ему предстоит освоить циклы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130834
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

maytonТебе дальше надо разбираться с темой еще более сложной.

Да, ему предстоит освоить циклы.


Циклы вроде были уже тут.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130835
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя есть словесное описание всего алгоритма? Тоесть
Без всяких бизнес названий и секретной инфы.

Типа.

1) Подконнектится к 1000 баз (в наличии должен быть список столько же хостов-паролей)
2) и т.д.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130839
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
У тебя есть словесное описание всего алгоритма? Тоесть
Без всяких бизнес названий и секретной инфы.

Типа.

1) Подконнектится к 1000 баз (в наличии должен быть список столько же хостов-паролей)
2) и т.д.



Да, конечно.

1) подключиться к 1 серверу, взять с него список ip (1000+).

2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем.

3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место.



Подключение проходит нормально, со структорой еще не раборался, чтоы в ней все хранить.

Передача char переменных в функци и обратно получилась нормльно, а специфических переменных (PGconn* и PGresult* ) что-то не получилось пока из функции вытащить, только в нее передались.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130843
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ
а специфических переменных (PGconn* и PGresult* ) что-то не получилось пока из функции вытащить, только в нее передались.

Это указатели, поэтому надо использовать указатели на указатели (PGconn** и PGresult** )
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130846
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ

==> 2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем.

3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место.

Вот тут есть вопрос. Этот физический хост где ты запускаешь С-приложение должен обладать
достаточно хорошим сетевым каналом. Потому-что одновременная отгрузка инфы на много
хостов делит трафик пропорционально.

Допустим у тебя 100 Мбит. И тогда каждая БД получит канал навроде 100 / 1000 = 0.1 Мбит
или 100 Килобит или 12 килобайт в секунду. Это скорость модема.

Если ты не хочешь пропорционально (будет например что-то типа Round-Robin) 10 работающих
при 980 ожидающих - то это будет более умная схема и более понятная.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130847
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу надёжности. Тут даже в датацентрах где виртуализация и внутрення сетка - всё равно
часть хостов отъезжают по разным причинам. Гарантировать-же оркестровку даже 100 хостов
офигенски сложно. Постоянно что-то не пингуется. Что-то недоступно. Где-то мигает канал.
То есть то нет. Где-то полоса пропускания упала.

Вобщем тут еще должно быть до чёрта технологий retry/reconnect. Ведение статусов хостов в отдельной
табличке.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130851
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Уткъ

==> 2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем.

3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место.

Вот тут есть вопрос. Этот физический хост где ты запускаешь С-приложение должен обладать
достаточно хорошим сетевым каналом. Потому-что одновременная отгрузка инфы на много
хостов делит трафик пропорционально.

Допустим у тебя 100 Мбит. И тогда каждая БД получит канал навроде 100 / 1000 = 0.1 Мбит
или 100 Килобит или 12 килобайт в секунду. Это скорость модема.

Если ты не хочешь пропорционально (будет например что-то типа Round-Robin) 10 работающих
при 980 ожидающих - то это будет более умная схема и более понятная.

ИМХО тут проще наоборот решать: данные из таблички в архиве кидаешь куда-нибудь в инет, а всем ожидающим ссылку на скачивание. Дальше все качают и заливают каждый в свою БД.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130857
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уткъ

3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место.

Здесь - окей если работает агрегация.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130859
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T

ИМХО тут проще наоборот решать: данные из таблички в архиве кидаешь куда-нибудь в инет, а всем ожидающим ссылку на скачивание. Дальше все качают и заливают каждый в свою БД.

Это при условии что у него единый шаблон обновления для всех баз.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130864
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T
Уткъ
а специфических переменных (PGconn* и PGresult* ) что-то не получилось пока из функции вытащить, только в нее передались.

Это указатели, поэтому надо использовать указатели на указатели (PGconn** и PGresult** )



Сделал в объявлении функции:

Код: plaintext
1.
my_funk(PGconn** conn_1, PGresult** res_1)



А при вызове функции
Код: plaintext
1.
my_funk(&conn_1, &res_1)



При этом в main они объявленны:

Код: plaintext
1.
2.
PGconn*    conn_1;
PGresult*  res_1;




Теперь передаются из функции обратно в main, надеюсь верно сделал.


Спасибо! :)
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130865
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Уткъ

==> 2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем.

3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место.

Вот тут есть вопрос. Этот физический хост где ты запускаешь С-приложение должен обладать
достаточно хорошим сетевым каналом. Потому-что одновременная отгрузка инфы на много
хостов делит трафик пропорционально.

Допустим у тебя 100 Мбит. И тогда каждая БД получит канал навроде 100 / 1000 = 0.1 Мбит
или 100 Килобит или 12 килобайт в секунду. Это скорость модема.

Если ты не хочешь пропорционально (будет например что-то типа Round-Robin) 10 работающих
при 980 ожидающих - то это будет более умная схема и более понятная.


Есть такое дело.

Тут уже не будет негативного влияния длинных запросов, как если бы это было сделано на psql, поэтому парралельность можно и уменьшать.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130866
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
По поводу надёжности. Тут даже в датацентрах где виртуализация и внутрення сетка - всё равно
часть хостов отъезжают по разным причинам. Гарантировать-же оркестровку даже 100 хостов
офигенски сложно. Постоянно что-то не пингуется. Что-то недоступно. Где-то мигает канал.
То есть то нет. Где-то полоса пропускания упала.

Вобщем тут еще должно быть до чёрта технологий retry/reconnect. Ведение статусов хостов в отдельной
табличке.


Пока на это можно не образать внимания, главное чтобы 95%-99% хостов были доступны.

если недоступен - просто пропускается.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130879
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
УткъТут уже не будет негативного влияния длинных запросов, как если бы это было
сделано на psql

С чего ты это взял? Твоя программа ничем не будет отличаться от десятков
параллельно запущенных psql.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130881
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проще осуществить обратную задачу - на серверах по "крону" отдать отчет на центральный сервер
ну если только это надо не по "щелчку клерка"
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130883
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто то переизобретает колесо Заббикс
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130889
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl
Уткъ
пропущено...


Все время забываю проусловность переменных )


Кстати, такая идея пришла:

Можно же стуктуру наверное использовать, точнее массив из структуры.

Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп.
Да, это делается массивом структур.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct pair {
    char *key;
    char *value;
};

struct pair *arr = malloc(sizeof(struct pair) * N);
arr[123].key = "172.0.0.5";
arr[123].value = "some other text";



а для нахождения делаешь цикл типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
struct pair *get_value(char *key) {
  struct pair *found_pair = NULL;
  for( int i=0; i<N; i++) {
     if( strcmp(arr[i].key, key) == 0) {
       found_pair = arr[i];
       break;
     }
  }
  if(found_pair) return found_pair.value;
  return NULL;
}




Спасибо!

Это похоже на то что надо.




Ради теста объявил такую структуру:

Код: plaintext
1.
2.
3.
4.
struct pair {
    char* key;
    PGconn* conn;
};




Вот так массив объявил (причем если N даже 0 задать - все равно работает):

Код: plaintext
1.
struct pair *arr = malloc(sizeof(struct pair) * N);






Вот так элементы присваваются:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
arr[0].key = "172.0.0.1";
arr[0].conn = PQconnectdb("host=172.0.0.1 -U postgres");

arr[1].key = "172.0.0.2";
arr[1].conn = PQconnectdb("host=172.0.0.2 -U postgres");

arr[2].key = "172.0.0.3";
arr[2].conn = PQconnectdb("host=172.0.0.3 -U postgres");

//и т.д.



Причем коннекты в БД создаются успешно.


Ну это вообще то что надо!!!


Только сильно похоже на первый пост, где я пытался делать так:

Код: plaintext
1.
2.
3.
char* massive_var[0][0]; 
massive_var[0][0] = (char*)calloc(10000, sizeof(char));
massive_var[0][0] = "first_record";




Скажите, так (массив из структур) точно можно массив объявлять, без ссылок на ссылки и т.п. ?
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130890
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А есть в Postgres аналог DBMS_SCHEDULER или DBMS_JOB ?
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130891
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
А есть в Postgres аналог DBMS_SCHEDULER или DBMS_JOB ?


Прямо в голом постгрессе нет.

Есть какие-то поделки, я ими не пользовался.

крон удобнее.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130893
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Читаю про массивы структур. Это круто.

Но меня смущает что там ни где не выделяют и не высвобождают память:

https://metanit.com/cpp/c/6.4.php


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <stdio.h>
 
struct person 
{
    int age;
    char name[20];
};
 
int main(void)
{
    struct person people[] = {23, "Tom", 32, "Bob", 26, "Alice", 41, "Sam"};
    int n = sizeof(people)/sizeof(people[0]);
    for(int i=0; i<n; i++)
    {
        printf("Name:%s \t Age: %d \n", people[i].name, people[i].age);
    }
    return 0;
}






Ну и меня насторажило что не выпало ни разу сегментайшн фаулт, с массивом структур.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130895
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То что ты делаешь похоже на координатор распределенных ... толи отчетов толи репликаций.

Мне кажется что в топике мы еще не исчерпали всех инженерных возможностей.
Cron мне кажется неудобным к использованию. Ну .. пускай админы с девопсами
его лупят. Для них - текстовые файлы - это native programming а для нас - нормальный
API имеет обычно вид вызова функции из твоего языка разработки.

Поэтому к чорту крон.

Вот если-бы на всех slave-машинах (я буду эту 1000 штук хостов называть slave) был поднят
какой-то Tomcat - тогда другое дело. Можно делать красивые задачи и чтоб сами slaves
ходили в центр и получали задачи и исполняли их.

Идея Димы - выкладывать на доступ табличку - хорошая. Я ее полностью поддерживаю.
Но это в рамках вашей инфраструктуры надо обсуждать. Не в торренты конечно кидать.
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130896
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
То что ты делаешь похоже на координатор распределенных ... толи отчетов толи репликаций.

Мне кажется что в топике мы еще не исчерпали всех инженерных возможностей.
Cron мне кажется неудобным к использованию. Ну .. пускай админы с девопсами
его лупят. Для них - текстовые файлы - это native programming а для нас - нормальный
API имеет обычно вид вызова функции из твоего языка разработки.

Поэтому к чорту крон.

Вот если-бы на всех slave-машинах (я буду эту 1000 штук хостов называть slave) был поднят
какой-то Tomcat - тогда другое дело. Можно делать красивые задачи и чтоб сами slaves
ходили в центр и получали задачи и исполняли их.

Идея Димы - выкладывать на доступ табличку - хорошая. Я ее полностью поддерживаю.
Но это в рамках вашей инфраструктуры надо обсуждать. Не в торренты конечно кидать.


Да, конечно, в идеале все через веб вызовы.

Но на данном этапе выбрано такое архитектурное решение, довольно жесткое, но оно тут оправдано.

В общем, попробую сейчас все переписать на массив из структур...
...
Рейтинг: 0 / 0
Си. Освободить память 2-мерного сторкового массива
    #40130897
Уткъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот такое объявление годиться?



Код: plaintext
1.
2.
3.
4.
5.
6.
struct pair {
    char* key;
    PGconn* conn;
};

struct pair *arr = malloc(sizeof(struct pair) * N);




char* - это получается ссылка, для хранение строки в структуре это нормально или лучще как-нить так:

Код: plaintext
1.
2.
3.
4.
struct pair {
    char[100] key;
    PGconn* conn;
};
...
Рейтинг: 0 / 0
25 сообщений из 308, страница 7 из 13
Форумы / C++ [игнор отключен] [закрыт для гостей] / Си. Освободить память 2-мерного сторкового массива
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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