|
|
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. В программе, собирающей инфу об интервалах работы приложений мне нужно получать точное время, каждый раз, при старте или остановке какого-либо процесса, в данный момент это делается при помощи запросов GETDATE() к SQL серверу (в него же записывается результат работы программы), но так как клиентов 1000+ админы жалуются, что такие запросы ДДОСят SQL. Вот пытаюсь придумать альтернативные варианты массового получения точного времени. Пока нарисовалось такое: 1. NTP. Запрашивать каждый раз время с него, но для этого надо поднимать сервер точного времени или брать с контроллеров домена. Но пока не ясно на сколько это пригрузит сервера и сеть. Плюс зависимость от этих самых серверов и сети; 2. Запрашивать время в момент старта программы из SQL, запускать таймер и в последующем точное время вычислять прибавляя значение таймера ко времени из SQL. Но тут возникают проблеммы связанные с тем, что таймеры под Win работают очень неточно, по крайней мере время, вычисляемое таким образом, за минуту уходит на 5-10 с, может это из-за режима отладки, но все равно доверия не вызывает; 3. Разово запрашивать время с SQL, затем вычислить разницу между временем сервера и ПК и в дальнейшем корректировать время ПК на эту разницу. В этом случае не понятно как бороться с переводом времени на ПК в момент работы программы, ведь изначальный дифф будет неверен. Как поступить, пока не могу определиться. Если решать в лоб, то надо запрашивать либо по NTP или как-нить ещё, например, брать из домена. Но это прилично пригрузит сервера, а этого не хотелось бы. Логично было бы привязаться ко времени ПК, но как определять, что часы переводились? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2012, 09:29 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
В начале работы смотрите время на сервере, время на локальном компе. Определяете разность. Потом каждый раз когда нужно время, берете время на локальном компе и имея разность, получаете серверное время, не нагружая его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2012, 16:08 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
PlayerDN3. Разово запрашивать время с SQL, затем вычислить разницу между временем сервера и ПК и в дальнейшем корректировать время ПК на эту разницу. В этом случае не понятно как бороться с переводом времени на ПК в момент работы программы, ведь изначальный дифф будет неверен.На GetTickCount() перевод времени ведь не влияет? Можно от этого как-то считать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2012, 18:30 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
Странно вообще то, что "админы жалуются, что запросы DDOSят SQL". В свое время, связка (>100 клиентов (WXP/C++) + MSSQL 2005 + DC W2k3 (замененная потом на WXP/W7 + MSSQL 2008 R2), windows-аутентификация) использовала проверку синхронизации при каждом запросе ... и никакой заметной нагрузки именно от этого вообще не наблюдалось... Может, оттого, что логика синхронизации выполнялась прямо на сервере, а не на станции? Вот вы результаты вашей "программы, собирающей инфу об интервалах работы приложений" как организуете/храните? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2012, 23:33 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
S.G.В начале работы смотрите время на сервере, время на локальном компе. Определяете разность. Потом каждый раз когда нужно время, берете время на локальном компе и имея разность, получаете серверное время, не нагружая его. А что будет если произойдет изменение времени на локальном компе? У юзеров, к сожалению, есть права лок. админов (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 17:23 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
?PlayerDN3. Разово запрашивать время с SQL, затем вычислить разницу между временем сервера и ПК и в дальнейшем корректировать время ПК на эту разницу. В этом случае не понятно как бороться с переводом времени на ПК в момент работы программы, ведь изначальный дифф будет неверен.На GetTickCount() перевод времени ведь не влияет? Можно от этого как-то считать. Мысль! Проверю насколько точно оно будет определяться при таком подходе. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 17:25 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
AndreTMСтранно вообще то, что "админы жалуются, что запросы DDOSят SQL". В свое время, связка (>100 клиентов (WXP/C++) + MSSQL 2005 + DC W2k3 (замененная потом на WXP/W7 + MSSQL 2008 R2), windows-аутентификация) использовала проверку синхронизации при каждом запросе ... и никакой заметной нагрузки именно от этого вообще не наблюдалось... Может, оттого, что логика синхронизации выполнялась прямо на сервере, а не на станции? Вот вы результаты вашей "программы, собирающей инфу об интервалах работы приложений" как организуете/храните? Т.е. локальное время ПК отдавалось на сервер и там уже сравнивалось с серверным? Результаты хранятся в таблице БД в таком виде: ИД записи, время старта и остановки процесса, название ПК, пользователь от чьего имени процесс был запущен, ну и детальная инфа о процессе (путь запуска, версия, компания-изготовитель и т.д.). Время остановки проставляется в момент записи данных в БД. Сейчас ещё хочу добавить буфер, т.е. если не удалось сохранить данные о процессе непосредственно после его остановки, складывать их в буфер и как только сервер станет доступным сливать их в него. Сейчас при проблемах с сетью или сервером данные теряются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 17:34 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
PlayerDNТ.е. локальное время ПК отдавалось на сервер и там уже сравнивалось с серверным?А что мешает просто вставлять время на сервере? Зачем присылать его (время) с клиента? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 18:09 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
PlayerDNЗдравствуйте. В программе, собирающей инфу об интервалах работы приложений мне нужно получать точное время, каждый раз, при старте или остановке какого-либо процесса, в данный момент это делается при помощи запросов GETDATE() к SQL серверу (в него же записывается результат работы программы), но так как клиентов 1000+ админы жалуются, что такие запросы ДДОСят SQL. Вот пытаюсь придумать альтернативные варианты массового получения точного времени. Так не делается. Тебе надо запускать агента на на том сервере где делаешь мониторинг и фиксировать события непосредственно там. А потом их логгировать и дальше гонять по логам свою аналитику. По поводу NNTP. Я не знаю как он устроен но подозреваю что он корректирует время с учётом беготни пакетов по сети. Либо делает больше измерений и усредняет точность. Тоесть тут два варианта. Либо ты получаешь очень точное время с лагом. Либо неточное но быстро. Выбирай сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 18:32 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
maytonПо поводу NNTP. Я не знаю как он устроен но подозреваю что он корректирует время с учётом беготни пакетов по сети.На всякий случай напомню: NTP и NNTP это соврешенно разные вещи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 19:44 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
PlayerDNAndreTMМожет, оттого, что логика синхронизации выполнялась прямо на сервере, а не на станции?Т.е. локальное время ПК отдавалось на сервер и там уже сравнивалось с сервернымВремя "локального хоста" вообще не учитывалось, вообще-то... Сервер получал запрос, формировал ответ,.. время всегда было SQL-серверное. Синхронизация же времени определялась при аутентификации пользователей (ибо - win autentication) при обращении SQL-сервера к DC. Домен-контроллер (первичный) же использовал синхронизацию через NTP с time.nist.gov . Т.е. для хостов LAN источником "реального" времени была всего одна точка - DC, как и положено по дефолту... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2012, 21:40 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovА что мешает просто вставлять время на сервере? Зачем присылать его (время) с клиента? В записи лога используется два времени: время старта и время остановки. Время остановки = время записи строки в БД. Время старта проставляет клиент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2012, 11:17 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
maytonТак не делается. Тебе надо запускать агента на на том сервере где делаешь мониторинг и фиксировать события непосредственно там. А потом их логгировать и дальше гонять по логам свою аналитику. Думал над таким вариантом, но не нашел преимуществ по сравнению с простой записью на SQL-сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2012, 11:22 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
AndreTMВремя "локального хоста" вообще не учитывалось, вообще-то... Сервер получал запрос, формировал ответ,.. время всегда было SQL-серверное. Синхронизация же времени определялась при аутентификации пользователей (ибо - win autentication) при обращении SQL-сервера к DC. Домен-контроллер (первичный) же использовал синхронизацию через NTP с time.nist.gov . Т.е. для хостов LAN источником "реального" времени была всего одна точка - DC, как и положено по дефолту... Как быть с изменением времени пользователем? Административный запрет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2012, 11:26 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
Вобщем пока остановился на использовании ф-ции GetTickCount(), получило следующее: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. Покритикуйте, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2012, 11:33 |
|
||
|
Нужно очень часто получать точное время, какой выбрать способ. Подскажите.
|
|||
|---|---|---|---|
|
#18+
maytonPlayerDNЗдравствуйте. В программе, собирающей инфу об интервалах работы приложений мне нужно получать точное время, каждый раз, при старте или остановке какого-либо процесса, в данный момент это делается при помощи запросов GETDATE() к SQL серверу (в него же записывается результат работы программы), но так как клиентов 1000+ админы жалуются, что такие запросы ДДОСят SQL. Вот пытаюсь придумать альтернативные варианты массового получения точного времени. Так не делается. Тебе надо запускать агента на на том сервере где делаешь мониторинг и фиксировать события непосредственно там. А потом их логгировать и дальше гонять по логам свою аналитику. По поводу NNTP. Я не знаю как он устроен но подозреваю что он корректирует время с учётом беготни пакетов по сети. Либо делает больше измерений и усредняет точность. Тоесть тут два варианта. Либо ты получаешь очень точное время с лагом. Либо неточное но быстро. Выбирай сам. По умолчанию синхронизирует до микросекунд. Но за полчаса работы время можут уехать на тысячные и даже сотые доли секунды в одну или другую сторону, Точность времени понятие растяжимое , 2 TC, сколько точности нужно ? Если вы синхронизируете время с SQL , то синхнонизация машины с NTP сервером раз в пол часа - эталон точности на эти пол часа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2012, 14:04 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38039743&tid=1342049]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
148ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 406ms |

| 0 / 0 |
