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

Python 最好在数据存储或csv文件中维护列表?,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我想保留一个电子邮件黑名单,列出那些不想从我的服务中收到电子邮件的人 在发送每封电子邮件之前,我想查找一下收件人是否在列表中 两个选择中哪一个更好 我可以在数据存储中创建一个勒索列表模型,并将其键入电子邮件地址,这样我就可以使用get_by_id()进行更快的查找。在99%的情况下,收件人不在黑名单中,因此这实际上需要一次读取,因为它不会命中memcache 我可以将列入黑名单的电子邮件存储在csv文件中,并检查收件人是否在列表中。这似乎不会花费任何费用,但我不确定性能。我不认为名单会很大 还有

我想保留一个电子邮件黑名单,列出那些不想从我的服务中收到电子邮件的人

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

两个选择中哪一个更好

  • 我可以在数据存储中创建一个勒索列表模型,并将其键入电子邮件地址,这样我就可以使用get_by_id()进行更快的查找。在99%的情况下,收件人不在黑名单中,因此这实际上需要一次读取,因为它不会命中memcache

  • 我可以将列入黑名单的电子邮件存储在csv文件中,并检查收件人是否在列表中。这似乎不会花费任何费用,但我不确定性能。我不认为名单会很大

  • 还有更好的办法吗


  • 在成本和性能方面,哪一个更好

    据我所知,get_by_id()(小型)操作是免费的。因此,您将只支付例如小时。但我认为最好用另一种方式存储订阅电子邮件,因为存储成本很低,而且数据的非规范化是GAE上的一个好做法。无论如何,CSV看起来不是一个好主意。

    正如tx802所指出的,我相信您的意思是将CSV存储在云存储中。我们说得对吗

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

    不管怎样,这个选项并不能很好地升级。我建议您选择选项3)。使用Memcache[1]进行快速查找,并使用Datastore进行备份,Datastore也具有良好的性能

    还有别的事情要考虑。您应该存储/使用/查询完整列表还是单独的对象/实体

    这主要取决于列表中存储的信息的大小和数量。 Datastore和Memcache对其对象都有1MB的限制。如果您无法将列表放入其中,则必须将其拆分为单独的实体

    我希望有帮助。快乐编码


    [1]

    黑名单会有多大?这将有助于了解您是计划分批向多个收件人发送电子邮件,还是临时向单个收件人发送电子邮件。当你说你不希望名单很大时,你是在说~10、~100还是~1000?您是否打算将CSV存储在云存储中?该列表可能不到1000封电子邮件。大多数电子邮件都是临时发送的。有些情况下会出现批量爆炸,例如用户范围内的服务公告。是的,在云存储中存储将是一种选择。