|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Каждый файл приближенно до 128Мб. Что диск рационально утилизировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 17:22 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Я беру за основу идею что мне не нужен 1 месседж ка единица использования. Если при размере 1-4k средняя длина месседжа будет 2 к то в 128 Мегабайтном куске у меня лежит фрагмент FIFO порядка 65 тысяч месседжей. Это меня вполне устраивает. Все равно чтение и запись будет крупным потоком. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 17:26 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton В теме с буферизацией видосов речь идет о записях фиксированного размера. Их легче поддерживать. Как арифметику указателей в С++ Mayton, фиксированные <=> не фиксированные - двадцать строчек кода В момент записи: Разбиваем на сhunk'и и пишем в FIFO Circle Ring Buffer, у последней записи ставим признак последняя В момент чтения: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Для вариативного размера... я пока придумал писать sequence из файлов. Типа Чем сиквенс из 10 файлов по 128 Mb лучше одного файла в 1.2 Gb - мне не понятно Чем он помогает при записях разной длина - мне так же не понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:39 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, предлагай свои варианты. Базовый проткол остаётся тот-же самый. Но добавим метод poll. И несколько очередей (несколько экземпляров Q) и бросание исключений и ошибки статусов для каждой команды. Код: javascript 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:46 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton В теме с буферизацией видосов.... тут скорее вопрос: 1. допустимо и нужно ли "накапливать" входящие пакеты в памяти перед записью на диск? 2. какая максимальная задержка по времени допустима? (пакет пришел и пауза... буфер не заполнен, нужен сброс по таймеру) 3. требование к надежности (нужно ли и когда жестко flush'ить) 4. Так же не очень понятно, где хранить head - tail позицию. Вроде же они должны быть синхронезированы у читателя и писателя (когда очередь не заполнена и читатели ждут новых данных). Если на диске, когда их flush'ить С последним пунктом не уверен, нужно думать, а что бы начинать думать, по хорошему нужно начинать кодить ))) совершенно не понятно, что Вы имели в виду под "удалением" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:47 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton В теме с буферизацией видосов.... тут скорее вопрос: 1. допустимо и нужно ли "накапливать" входящие пакеты в памяти перед записью на диск? Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:49 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev 4. Так же не очень понятно, где хранить head - tail позицию. Вроде же они должны быть синхронезированы у читателя и писателя (когда очередь не заполнена и читатели ждут новых данных). Если на диске, когда их flush'ить С последним пунктом не уверен, нужно думать, а что бы начинать думать, по хорошему нужно начинать кодить ))) Это самый интересный и сложный вопрос. Я как раз думаю что форум придумает пропозицию. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:51 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev 3. требование к надежности (нужно ли и когда жестко flush'ить) Нет жесткого требования. Если вы будете флашить через каждые 3 секунды с последнего event то я не против. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:52 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev совершенно не понятно, что Вы имели в виду под "удалением" Очистка? Ну... как вариант обнаружен баг и очередь надо сбросить. Или в кластере java-приложений насмерть помер один из nodes и чтобы ребаланс евентов сработал - надо просто рестаровать бизнес процессы в новом окружении очередей. Старые данные что скопились в очередях уже ценности не представляют. Их можно убить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 18:54 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Пятничный креатив: сбрасывайте сообщения в Lucene (если нужно легкое рукоблудное решение с нулевым администрированием) или в Elastic (тут с администрированием, зато и с кластеризацией) с индексацией по времени ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 20:47 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
В первом приближении Многопоток не проверял и не делал Проверок не делал Гитхабом не заморачивался ))) Буферизацию не делал. Флегда флушится. пришлось сделать свою реализацию FileOutputStream, FileInputStream трогать не стал ))) Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Код: java 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.
простейший тест на запись и чтение: Код: java 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 21:53 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, И как его закрыть тогда? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2019, 00:16 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
забыл ник Leonid Kudryavtsev, И как его закрыть тогда? Что если вдруг эксепшен? Ну так себе идея.. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2019, 00:17 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Есть ещё memcached и rocksdb. https://db-engines.com/en/system/Memcached;RocksDB;SwayDB Хорошего вам дня! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2019, 06:29 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Спасибо. Попробуем. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2019, 11:35 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Хм. Кое что не юзается. Убрал. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2019, 23:54 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Надо еще потестить в 2 потока. Один добавляет. Другой poll-ит. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 01:34 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Надо еще потестить в 2 потока. Один добавляет. Другой poll-ит. я никак не могу придумать, как сделать проверку на переполнение буфера если ее не делать - то все просто, но как-то хочется, что бы если пишешь больше размера буфера и читалка не успевает - был бы эксепшен ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 16:21 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Давайте отложим пока. Это не бизнес-кейс. Главное что больше чем heap положили в голову очереди - уже хорошо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 17:59 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Заменил Object на Serializable. Изменил тест пока на синхронное отрабатывание сначала продюсера а потом потребителя. Код: java 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.
Код: java 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2019, 23:44 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Даже не могу представить как ты по работе проблемы решаешь. Всё - сам кодишь. Ну почему всё. Либы для оракла и раббита я не велосипедил ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 06:29 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Честно говоря, если делать велосипед, я бы делал что нибудь простое. Типа Circle Ring Buffer на диске. Chunk фиксированного размера (байтов 30-60). Большие записи разбивать на несколько chunk'ов и просто писать последовательно. Структура хранения будет тривиальная. Поскольку FIFO и Circle Ring Buffer то не будет фрагментации и все общение с диском исключительно последовательное - максимальная производительность на любом жетком диске. Да, думал, пришел к тому же самому. Разделители - не нужно, запись кусками с метками (принято/отправленно/кусок/заголовок) настраиваемого размера. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 06:31 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Заменил Object на Serializable AFAIK: Serializable - тупое и медленное г...но Externalizable - rulezzzzz ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 20:03 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton Заменил Object на Serializable AFAIK: Serializable - тупое и медленное г...но Externalizable - rulezzzzz Согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 20:51 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
crutchmaster Leonid Kudryavtsev Честно говоря, если делать велосипед, я бы делал что нибудь простое. Типа Circle Ring Buffer на диске. Chunk фиксированного размера (байтов 30-60). Большие записи разбивать на несколько chunk'ов и просто писать последовательно. Структура хранения будет тривиальная. Поскольку FIFO и Circle Ring Buffer то не будет фрагментации и все общение с диском исключительно последовательное - максимальная производительность на любом жетком диске. Да, думал, пришел к тому же самому. Разделители - не нужно, запись кусками с метками (принято/отправленно/кусок/заголовок) настраиваемого размера. Если использовать мой подход Код: java 1. 2.
то кольцо делать не нужно. Файловая система предоставляет нам все что нужно. А чтоб readPos не догонял writePos их надо синхронизировать через Приложение. Как вариант - два Atomic счетчика. Long указателя должно хватить на десятилетия. Инстанс приложения столько не живет обычно. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2019, 20:54 |
|
|
start [/forum/topic.php?fid=59&msg=39906418&tid=2120961]: |
0ms |
get settings: |
12ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
39ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
539ms |
get tp. blocked users: |
1ms |
others: | 328ms |
total: | 931ms |
0 / 0 |