列表,集合和词典的Python原生功能完全摇滚。当数据变得非常大时,有没有办法继续使用本机功能?我正在处理的问题涉及非常大的列表的匹配(交集)。我还没有突破限制 - 实际上我并不知道限制是什么 - 并且不希望在数据按预期增长之后重新实现大的重复。
是否合理部署在谷歌应用引擎之类的东西上,宣传没有实际的规模限制并继续使用本机功能,而不是真的考虑这个?
是否存在一些Python魔法可以隐藏列表,集合或字典是否在Python管理的内存中而不是数据库中 - 因此数据的物理部署可以与我在代码中的操作保持不同?
你是这样的,Python先生还是Python超级专家,随着数据量的增长处理列表,设置和决策?
我不太清楚你的意思 列表,集和词典的本机功能。但是,您可以创建模拟的类 容器类型 和 序列类型 通过定义一些 具有特殊名称的方法。这意味着您可以创建一个行为类似于列表的类,但将其数据存储在SQL数据库或GAE数据存储区中。简单来说,这就是ORM的作用。但是,将对象映射到数据库非常复杂,创建自己的ORM可能不是一个好主意,而是使用现有的ORM。
我担心没有一个通用的解决方案。特别是GAE不是某种Magic Fairy Dust,你可以在你的代码上撒上它来扩展它。要创建可扩展的应用程序,您必须记住几个限制。其中一些是一般的,比如 计算复杂性,其他特定于您的代码运行的环境。例如。在GAE上 最长响应时间限制为30秒 查询数据存储区的工作方式与其他数据库的工作方式不同。
在不知道具体问题的情况下很难给出任何具体的建议,但我怀疑GAE是正确的解决方案。
通常,如果您想使用大型数据集,您必须从一开始就记住这一点,否则随着数据集的增长,您将不得不重新编写代码,算法和数据结构。
你在描述我的梦想!但是,我认为你不能这样做。我一直想要的东西就像 LINQ 对于Python但该语言不允许将Python语法用于本机数据库操作AFAIK。如果可能,您可以使用列表编写代码,然后使用相同的代码从数据库中检索数据。
我不建议您仅在列表和集合中编写大量代码,因为将其迁移到可伸缩平台并不容易。我建议你使用像ORM这样的东西。 GAE甚至有 它自己的ORM系统 你可以使用其他的如 SQLAlchemy的 和 SQLObject的 与... SQLite的。
不幸的是,你不能使用列表推导等很棒的东西来过滤数据库中的数据。当然,您可以在从数据库获取数据后对数据进行过滤,但您仍需要使用某种类似SQL的语言构建查询,以查询对象或从数据库返回大量对象。
OTOH,有 Buzhug,一个用Python编写的好奇的非关系数据库系统,它允许使用自然的Python语法。我从来没有使用它,我不知道它是否可扩展,所以我不会把钱花在它上面。但是,您可以测试它,看它是否可以帮助您。
您可以使用ORM:对象关系映射:类获取表,对象获取行。我喜欢Django ORM。您也可以将它用于非Web应用程序。我从未在GAE上使用它,但我认为这是可能的。