|
|
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть таблицы STAT --------------- ID - intger - PK DATA - timestamp - дата и время состояния DATCHIK - integer - номер датчика STATUS - integer - статус датчика ----------------- в таблицу ежесенкундно заносятся данные по состоянию датчика, 0 - выкл 1 - вкл. За несколько часов датчик может находиться продолжительное время во включенном состояние так и в выключенном. Как мне определить продолжительность последних периодов (два последних периода) нахождения датчика в состоянии вкл (1).? Предполагаю простым перебором по выборке в ХП, но кажется это не всем правильный подход. Версия FB 2.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 13:47 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVПредполагаю простым перебором по выборке в ХП, но кажется это не всем правильный подход. Это оптимальный подход. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 13:59 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFV, какие-нибудь данные для примера можете привести ? может ли так быть, что для одного и того же датчика два и более раз подряд в поле status будет 1 или 0 (т.е. может ли что-то там "сглючить" в железках) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 14:02 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 14:03 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
Таблоид, это посекундное состояние по датчику, состояние датчика может меняться, но всегда есть длительные однородные состояния Пример по датчику. Дата и его состояние ------------------------- 28.10.2014 15:00:04 - 1 28.10.2014 15:00:03 - 1 28.10.2014 15:00:02 - 1 28.10.2014 15:00:01 - 1 ............................ 28.10.2014 14:04:04 - 0 28.10.2014 14:04:03 - 0 28.10.2014 14:04:02 - 0 28.10.2014 14:04:01 - 0 ............................ 28.10.2014 12:04:03 - 1 28.10.2014 12:04:02 - 1 28.10.2014 12:04:01 - 1 --------------------- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 14:07 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVэто посекундное состояние по датчику, состояние датчика может меняться, но всегда есть длительные однородные состояния А есть смысл хранить час по секундам и состояниям, когда можно триггером или процедурой обрезать лишние строки и вместо 86тыс записей одну за час? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 14:11 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVпосекундное состояние по датчику, состояние датчика может меняться, но всегда есть длительные однородные состоянияЕсли нужно вытаскивать два последних периода состояния вкл/выкл только по ОДНОМУ (заранее выбранному) датчику, то прототип может быть таким: ddl Код: plaintext 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. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Если же кол-во датчиков, по которым нужно вытащить периоды, два и более, то юзайте ХП, как выше сказал ДС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 15:08 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
wadmanAlexeyFVэто посекундное состояние по датчику, состояние датчика может меняться, но всегда есть длительные однородные состояния А есть смысл хранить час по секундам и состояниям, когда можно триггером или процедурой обрезать лишние строки и вместо 86тыс записей одну за час? тогда усложнится построение горизонтальной развертки по состояниям датчиков. сейчас я делаю простую выборку , а придется сложную ХП с проверкой пограничных переходов. Изначально я делал запись только при смене состояний датчика, но с ростом числа датчиков до 50 геометрически выросла сложность ХП для полного горизонтального снимка датчиков по времени. Датчики собирают состояние по техпроцессу, и нужно знать их состояние в любой момент времени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 15:08 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
Таблоид, Спасибо, буду пробовать данное направление. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 15:10 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
Хранить в 2 видах? и так и эдак, писать триггером, читать тот вид, который удобней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 15:16 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVИзначально я делал запись только при смене состояний датчика, но с ростом числа датчиков до 50 геометрически выросла сложность ХП для полного горизонтального снимка датчиков по времени. Вот еще на этом этапе стоило спросить совета, потому как не должна сложность "геометрически" расти при правильно спроектированной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 15:22 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
wadmanAlexeyFVИзначально я делал запись только при смене состояний датчика, но с ростом числа датчиков до 50 геометрически выросла сложность ХП для полного горизонтального снимка датчиков по времени. Вот еще на этом этапе стоило спросить совета, потому как не должна сложность "геометрически" расти при правильно спроектированной таблице. Структура таблицы - выше описана. Число датчиков на текущий момент 60. Поскольку состояния датчиков в неустоявщемся переходе могут меняться быстро , то для понимая переходных процессов требуется строить горизонтальную выборку по датчикам в разрезе посекундно. дата время, датчик 1. датчик 2 ...... датчик 60 с точки зрения уменьшения объема, да эффективнее хранить только переходные моменты, но не всегда даже нормализация таблиц оправдана. Так и в этой ситуации, проще хранить ВЕСЬ объем и делать по нему выборку, нежели добавлять в выборки недостающие данные из пограничных переходов. Возможно я ошибаюсь. Но сейчас ХП для горизонтальной выборки у меня выглядит так. Код: plsql 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. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 15:55 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVСтруктура таблицы - выше описана. Правда, что из индексов только PK? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 16:04 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
wadmanAlexeyFVСтруктура таблицы - выше описана. Правда, что из индексов только PK? индексированы все поля таблицы. Query ------------------------------------------------ Plan ------------------------------------------------ Query Time ------------------------------------------------ Prepare : 78,00 ms Execute : 12386,00 ms Avg fetch time: 516,08 ms Memory ------------------------------------------------ Current: 53817688 Max : 56128800 Buffers: 2048 Operations ------------------------------------------------ Read : 12074 Writes : 117 Fetches: 5899158 Marks : 3906 Enchanced Info: +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+ | Table Name | Records | Indexed | Non-Indexed | Updates | Deletes | Inserts | Backouts | Purges | Expunges | | | Total | reads | reads | | | | | | | +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+ |LINIYA1 | 0 | 2941376 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +-------------------------------+-----------+-----------+-------------+---------+---------+---------+----------+----------+----------+ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 16:31 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
Какой-то ужоснах, как мне кажется. Выдавай инфу о датчиках в отдельных записях и все. Тогда и добавление датчика вообще никак не затронет метаданные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 19:06 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVНо сейчас ХП для горизонтальной выборки у меня выглядит так. кто этот кошмар писал, и не стоит-ли его переделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 19:40 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVиндексированы все поля таблицы. зачем? план пустой, потому что вылез за пределы 64к, или еще по каким-то причинам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2014, 19:42 |
|
||
|
Запсро на подсчет продолжительности периода
|
|||
|---|---|---|---|
|
#18+
AlexeyFVwadmanпропущено... Вот еще на этом этапе стоило спросить совета, потому как не должна сложность "геометрически" расти при правильно спроектированной таблице. Структура таблицы - выше описана. Число датчиков на текущий момент 60. Поскольку состояния датчиков в неустоявщемся переходе могут меняться быстро , то для понимая переходных процессов требуется строить горизонтальную выборку по датчикам в разрезе посекундно. дата время, датчик 1. датчик 2 ...... датчик 60 с точки зрения уменьшения объема, да эффективнее хранить только переходные моменты, но не всегда даже нормализация таблиц оправдана. Так и в этой ситуации, проще хранить ВЕСЬ объем и делать по нему выборку, нежели добавлять в выборки недостающие данные из пограничных переходов. Возможно я ошибаюсь. Но сейчас ХП для горизонтальной выборки у меня выглядит так. ... Может построение таблицы вынести в приложение и выбирать только данные ? Код: plsql 1. 2. 3. ИМХО проще будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2014, 08:49 |
|
||
|
|

start [/forum/topic.php?fid=40&tid=1563235]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 326ms |

| 0 / 0 |
