
又到我重复造轮子的时候了
我现在(收邮件)的架构是:

mailin.io,收取邮件,然后解析成 JSON 。问题是, mailin 现在没有 retry ,也就是说,如果 webhook 挂了,你就收不到邮件了。所以我加了个 Redis 做 Queue ,另一个 Worker 做 webhook submission 。附件的话就直接上传到 S3 ,或者如果你像我一样自己跑 S3 的话,你可以上传到 S3 兼容的对象存储。
然后问题来了。我收到了邮件,收到了 JSON ,怎么把邮件存在数据库?
{ text: 'This is a test mailing', headers: { date: 'Wed, 10 Feb 2016 20:16:22 -0800', to: '[email protected]', from: '[email protected]', subject: 'test Wed, 10 Feb 2016 20:16:22 -0800', 'x-mailer': 'swaks v20130209.0 jetmore.org/john/code/swaks/', 'mime-version': '1.0', 'content-type': 'multipart/mixed; boundary="----=_MIME_BOUNDARY_000_18907"' }, subject: 'test Wed, 10 Feb 2016 20:16:22 -0800', priority: 'normal', from: [ { address: '[email protected]', name: '' } ], to: [ { address: '[email protected]', name: '' } ], date: '2016-02-11T04:16:22.000Z', attachments: [ { contentType: 'image/gif', fileName: '719.gif', contentDisposition: 'attachment', transferEncoding: 'base64', generatedFileName: '719.gif', contentId: 'dca3991c52568b0134a6cb117e1a7330@mailparser', checksum: '44859f23af61cacb375df1379051da25', length: 7298 } ], html: 'This is a test mailing', dkim: 'failed', spf: 'failed', spamScore: 0, language: 'english', cc: [], connection: { id: '267e75b4-0003-40df-acec-59b7c5153bbb', remoteAddress: '127.0.0.1', clientHostname: '[127.0.0.1]', hostNameAppearsAs: 'jerrys-macbook-pro.local', envelope: { mailFrom: [Object], rcptTo: [Object] }, user: false, transaction: 1, xClient: {}, xForward: {}, mailPath: '.tmp/267e75b4-0003-40df-acec-59b7c5153bbb' }, envelopeFrom: { address: '[email protected]', args: false }, envelopeTo: [ { address: '[email protected]', args: false } ] } 什么数据库架构了? RDBMS ? NoSQL ?求大家给意见
1 kslr 2016-02-11 13:05:32 +08:00 via Android 原生支持 json 的呢, PostgreSQL, MongoDB |
3 lhbc 2016-02-11 14:32:41 +08:00 邮件这东西,存文件应该比存数据库好。 既然解析成 json 了,那直接存 json 多好,最新的 MySQL 也支持 json 对于支持 json 的数据库,索引、搜索、读取 json 的部分内容,都是没有问题的 |
8 RangerWolf 2016-02-12 13:53:45 +08:00 最近大项目我喜欢用 Cassandra 小项目 mysql |