我的服务器上有一堆单词表,我一直在计划制作一个简单的开源 JSON API,如果密码在列表1上,它会返回,作为一种验证方法。我正在使用 Flask 在 Python 中执行此操作,如果输入存在,则实际上只是返回。
一个小问题:词表总计约 1.5 亿个条目,以及 1.1GB 的文本。
我的 API(最小)如下。将每一行存储在 MongoDB 中并重复查找是否更有效,或者使用单例将整个内容存储在内存中,并在我调用时在启动时填充它app.run
?还是这些差异是主观的?
此外,做后者甚至是一种好习惯吗?我认为如果我向公众开放,查找可能会开始变得繁重。我也有人建议使用Trie进行有效搜索。
更新:我做了一些测试,文档搜索速度非常慢,记录数量如此之多。对需要有效搜索的单列数据使用具有适当索引的数据库是否合理?
from flask import Flask
from flask.views import MethodView
from flask.ext.pymongo import PyMongo
import json
app = Flask(__name__)
mongo = PyMongo(app)
class HashCheck(MethodView):
def post(self):
return json.dumps({'result' :
not mongo.db.passwords.find({'pass' : request.form["password"])})
# Error-handling + test cases to come. Negate is for bool.
def get(self):
return redirect('/')
if __name__ == "__main__":
app.add_url_rule('/api/', view_func=HashCheck.as_view('api'))
app.run(host="0.0.0.0", debug=True)
1:我是个安全狂。我在我的登录表单中使用它并拒绝常见的输入。其中一个词表是UNIQPASS。