【发布时间】:2017-12-02 18:29:12
【问题描述】:
我在这里有一个更开放的设计导向问题。我有 Python 方面的背景,但没有网络或异步编程方面的背景。我正在编写一个应用程序来保存从 websockets 24/24、7/7 收集的数据,以尽量减少数据丢失。
我最初的想法是使用带有 asyncio、aiohttp 和 aiofiles 的 Python 3.6。
我不知道是每个 websocket 连接使用一个协程还是每个 websocket 连接一个线程。与良好的连接错误处理相比,性能可能不是问题。
【问题讨论】:
-
我的第一个想法是使用真实的数据库,例如。 Postgres 不是普通文件和 aiofiles。
-
由于我需要不经常访问历史文件和压缩,我看不到优势。使用数据库,我需要维护架构、迁移、...
-
无论如何,您都需要维护架构和迁移,而无需数据库的所有帮助。您是否要实现写入人员日志并在内存中缓存,线程管理(隐含在 aiofiles 中)是否与使用 db 一样复杂,二进制数据打包和酸性事务如何,因此不完整的写入不会损坏你的数据。如果你正确地完成了这项工作,你最终会得到一个数据库的大部分内容,但工作量更大,需要维护的东西也更多,而且效果更差。
-
数据是数字还是文本?
-
它主要是数字,但也有文本和日期。我更关心保存历史而不是使用(全部)它 - 所以不需要担心前面的模式。 20 个数据 websocket 源的架构不同,因此当我可以直接保存原始数据(并压缩它)时,维护它似乎很昂贵。写不全?事实上,我假设我不会使用 aiofiles 损坏数据。我不知道这是否会成为一个问题,有兴趣了解更多关于这方面的信息。
标签: python websocket cloud aiohttp python-aiofiles