最好在数据存储区或csv文件中维护一个列表?

时间:2014-09-23 07:46:52

标签: python google-app-engine google-cloud-datastore app-engine-ndb

我想维护一个电子邮件黑名单,列出那些不希望从我的服务接收电子邮件的人。

在发送每封电子邮件之前,我想查看收件人是否在列表中。

2个选项中哪个更好?

  1. 我可以在数据存储区中创建一个BlacklistEmail模型并将其键入电子邮件地址,这样我就可以使用get_by_id()更快地进行查找。在99%的情况下,收件人不会被列入黑名单,因此这实际上会花费读取,因为它不会达到内存缓存。

  2. 我可以将列入黑名单的电子邮件存储在csv文件中,并检查收件人是否在列表中。这似乎不会花费任何成本,但我不确定性能。我不希望这个名单非常大。

  3. 还有其他更好的方法吗?

  4. 哪个在成本和性能方面更好?

2 个答案:

答案 0 :(得分:1)

正如tx802指出的那样,我认为您的意思是将CSV存储在云存储中。我们是对的吗?

在这种情况下,它可能是一种选择,但却是一种奇怪的选择。大多数情况下,如果它适合您拥有的其他工作流程,并且您不太关心超级性能,并且您不会经常更新它。当然,在它前面使用一个全局变量或Memcache并交叉你的手指,这样它就不会被刷新。

无论如何,此选项不会升级。我建议您选择3)。使用Memcache [1]进行快速查找并使用数据存储进行备份,数据存储也具有良好的性能。

还有其他事情需要考虑。你应该存储/ work_with /查询完整列表还是单独的对象/实体?

这主要取决于列表中存储的信息的大小和数量。 数据存储区和Memcache对其对象施加的限制为1MB。如果您无法在列表中填写列表,则必须将其拆分为单独的实体。

我希望它有所帮助。快乐的编码!

[1] https://developers.google.com/appengine/docs/python/memcache/#Python_When_to_use_a_memory_cache

答案 1 :(得分:0)

据我所知get_by_id()(小)操作是免费的。因此,您只需支付几小时的费用。但我认为将订阅电子邮件存储在另一种类型中会更好,因为存储很便宜,数据的非规范化是GAE的一个好习惯。无论如何,CSV看起来不是一个好主意。