2011-11-06 34 views
5

Tôi rất tò mò nếu có ai có thể cho tôi biết nếu sử dụng SQLite để lưu trữ một từ điển (như trong vũ lực) để sử dụng trong một kịch bản Python là một phương pháp hiệu quả. Trong khi tôi tương đối mới với Python, tôi có khá nhiều kinh nghiệm với các ngôn ngữ lập trình khác và hiện đang làm việc trên một công cụ pentesting để sử dụng trong Backtrack. Cho đến nay tôi khá ấn tượng với tốc độ và sự đơn giản của Python, và các truy vấn SQL của tôi dường như hoạt động khá lý tưởng để trả về các tiền tố cần thiết cho công cụ vũ lực của tôi. Tuy nhiên, tôi đoán những gì tôi đang tự hỏi là những gì là tiêu chuẩn để lưu trữ các tập tin dữ liệu lớn trong Python? Tôi có nhìn ra một cách tốt hơn (nhanh hơn) để lưu trữ tiền tố của tôi đơn giản chỉ vì sự thoải mái của tôi với SQL? Xin lưu ý rằng tôi không sử dụng Python để truy vấn ID từ 0 đến n và sử dụng chúng, thay vào đó tôi đang sử dụng Python để thu hẹp các khả năng và truy vấn các mục nhập từ điển phù hợp với tiêu chí. Bất kỳ trợ giúp hoặc ý kiến ​​sẽ được nhiều đánh giá cao!SQLite thông qua Python

+0

Bạn muốn nhanh như thế nào? Tập dữ liệu MB, GB, TB lớn đến mức nào? Những gì bạn có nghĩa là bởi "tiền tố" là nó như trong "cây tiền tố" (trie)? Các hoạt động bạn thực hiện tốt như thế nào trên dữ liệu tương ứng với mô hình quan hệ? – jfs

Trả lời

3

Có, sqlite là lựa chọn hợp lý để triển khai từ điển. Đối với tốc độ, hãy sử dụng tùy chọn: memory: và đảm bảo tạo các chỉ mục thích hợp cho tra cứu và truy vấn của bạn.

Đối với các cơ sở dữ liệu lớn, liên tục, nó cũng hoạt động tốt. Đối với tốc độ, hãy cẩn thận để thực hiện các giao dịch lớn thay vì mỗi khóa.

Việc sử dụng gợi ý và phù hợp với sqlite như một kho dữ liệu được bao phủ tại trang web của họ: http://www.sqlite.org/features.html

1

Nếu Raymond hettinger cũng khuyến cáo SQLite, thì đó là có thể đặt cược tốt nhất của bạn.

Nhưng một giải pháp Python gốc sẽ sử dụng tệp "dưa". Bạn sẽ xây dựng một Python dict chứa dữ liệu, sau đó "pickle" dict; sau đó bạn có thể "giải tán" dict. Nếu bạn chỉ có một chìa khóa bạn cần tìm kiếm, thì đây có thể là một cách tốt để đi.

Đối với Python 2.x, bạn có thể muốn sử dụng mô-đun cPickle. Đối với Python 3.x, chỉ có pickle, nhưng tôi tin rằng nó nhanh như cPickle.

http://docs.python.org/library/pickle.html

Mặt khác nếu dữ liệu của bạn là thực sự lớn, vì vậy lớn mà SQLite đang bắt đầu nghẹt thở vào nó, sau đó thay vì tách nó ra thành nhiều file SQLite nhỏ hơn và quản lý chúng, nó có thể làm cho có nghĩa là chỉ cần đổ mọi thứ vào một cơ sở dữ liệu thực sự như PostgreSQL.

Các vấn đề liên quan