|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
Где-то в степиAlex Kuznetsov, да забудь те вы о много поточном инсерте в базу.... если вытесняющую многозадачность можно победить для такой невьебенной задачи дополнительным клястером то база ну никак не будет писать в таблицу разными потоками..Коллеги, извините, если ввёл в заблуждение своей фразой "... сколько нужно для передачи файла в базу.". Я имел в виду по одному потоку на файл, а никак не пучок потоков на один файл. Понятно, что один такой файл можно будет слить в базу менее чем за 10 минут. Просто идея в том, чтобы отделить заливку в базу от получения данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2014, 13:32 |
|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
A есть ли выгода в многопоточности? На много увеличится производительность? Где то попадалось что в каждый момент времени выполняется только один поток и бывает проигрыш из за постоянного переключения потоков. К примеру, 5 серверов с которых сливаются данные по TCPIP для каждого создаю поток т.е. 5 потоков, каждый поток пишет свой файл и производит выборку с сервера. Много ли выиграю? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2014, 20:49 |
|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
darlovA есть ли выгода в многопоточности? На много увеличится производительность? Где то попадалось что в каждый момент времени выполняется только один поток и бывает проигрыш из за постоянного переключения потоков. К примеру, 5 серверов с которых сливаются данные по TCPIP для каждого создаю поток т.е. 5 потоков, каждый поток пишет свой файл и производит выборку с сервера. Много ли выиграю?Зависит от количества ядер процессоров. При наличии к примеру четырёх ядер можно распределить к четыре потока каждый на отдельное ядро. Как Вы думаете, при этом будет выигрыш по производительности? А кстати, сервер БД, куда потом будут сливаться обработанные данные, он на отдельной машине или на той-же? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2014, 21:03 |
|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, А если 5 потоков 4 ядра, как будет выполняться? БД на той же машине. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2014, 21:10 |
|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
darlovAlex Kuznetsov, А если 5 потоков 4 ядра, как будет выполняться? БД на той же машине.Вы меня проверяете что-ли? Будет выполнять ровно так, как Вы нарисуете. Сможете запустить потоки на разных ядрах, значит три будет работать "отдельно" каждый в отдельном ядре, а два будут "разделять" одно ядро. В какой момент какой именно из этих двух потоков быстрее завершит свою работу, этого Вам даже дядюшка билли не скажет, ибо в винде вытесняющая многозадачность, "кончил, не кончил - три минуты"... В .Net, кстати, не так уж просто заставить поток Thread исполняться на каком-то определённом ядре, тем не менее возможно . БД на той-же машине... хм... "и мы ещё боремся за звание образцовой культуры быта" ... Сливать данные туда-же где будет и так нагружена дисковая подсистема... Я бы подумал над тем, чтобы вынести БД на отдельный сервер... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2014, 22:08 |
|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
Alex KuznetsovВы меня проверяете что-ли? Нет, просто вытесняю недопонимание. Alex KuznetsovЯ бы подумал над тем, чтобы вынести БД на отдельный сервер... Пока на одной машине, при продакшене и понижении производительности буду думать насчет второй машины. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2014, 22:24 |
|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
darlov, что-то вы усложняете, 40мб за 10 мин (70кб/сек) - это "ни о чем" даже для не очень мощного компа. копите в памяти, и то что собрали - раз в минуту другим потоком, как вам уже подсказали, формируете групповой Insert. Комп все успеет. Делал схожую систему, и когда симуляцией нагружал диким потоком UDP пакетов - даже на не очень мощном компе все работало с загрузкой проца не более 60%. При таком потоке данных, не уверен что стоит кэшировать все в файл перед заливкой в БД. 5 TCP - мне кажется, если делаете асинхронный прием данных, то принципиальной разницы между одним потоком и пятью не будет. Возможно стоит для каждого TCP просто делать свою очередь (очередь А). Поток заливающий в БД, должен лочить А, быстренько выгружать данные в свою очередь (Б) и отпускать очередь А чтоб туда мог продолжить писать TCP, и уже после из очереди Б формировать данные для загрузки. Симулируйте нагрузку, и там поймете как часто надо в БД писать, и на сколько большими порциями. Также разделите во времени очистку в базе старых данных, с заливкой новых. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.04.2014, 09:02 |
|
Как лучше хранить сырые данные
|
|||
---|---|---|---|
#18+
Я бы предложил вам протестировать самый быстрый (и самый надежный вариант) если заработает. Тупо инсертить данные по приходу в том виде, в котором приходят без выгрузки их в XML. В крайнем случае - можно их аггрегировать например минуту - и потом одним запросом инсертить. Скорее всего проблемы не возникнет, т.к. данных не так много. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.04.2014, 07:54 |
|
|
start [/forum/topic.php?fid=20&msg=38614160&tid=1403029]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
41ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 148ms |
0 / 0 |