2011-10-30 55 views
5

Tôi đang làm việc với dự án nơi tôi sử dụng Arduino với mô-đun Bluetooth và điện thoại di động Samsung Galaxy S II với hệ điều hành Android. Ý tưởng của dự án là gửi một số lệnh từ điện thoại di động của tôi đến Arduino qua Bluetooth. Tôi muốn bao gồm một cơ sở dữ liệu vào Arduino để khi tôi gửi thông tin đăng nhập từ điện thoại di động, Arduino sẽ kiểm tra cơ sở dữ liệu và nếu thông tin đăng nhập trùng khớp, nó lấy một số dữ liệu từ cơ sở dữ liệu và gửi đến điện thoại di động của tôi.Làm thế nào để lưu trữ một cơ sở dữ liệu bên trong Arduino?

Làm cách nào để lưu trữ cơ sở dữ liệu bên trong Arduino? Tôi có nên mua EEPROM hoặc RAM bên ngoài không? Và làm thế nào tôi có thể đối phó với cơ sở dữ liệu đó (thêm, xóa và thao tác dữ liệu)?

Ardunio của tôi thuộc loại UNO, BTW.

+0

Đây là cách * quá rộng để được trả lời trên SO. Về cơ bản, bạn hỏi "Làm thế nào để làm tất cả những điều này?" thậm chí không cần nghiên cứu đủ để hỏi đúng câu hỏi. –

+0

@BrianRoach Tôi chỉ yêu cầu đúng cách để làm điều đó, tôi không yêu cầu chi tiết. –

+0

@ Eng.Fouad Xin vui lòng tránh thuật ngữ "cơ sở dữ liệu" trong bối cảnh như vậy, bởi vì một cơ sở dữ liệu là một con thú hoàn toàn khác với những gì bạn cần. Xem [Wikipedia] (http://en.wikipedia.org/wiki/Database) –

Trả lời

7

Chỉ cần đăng nhập đơn giản bạn không cần một cơ sở dữ liệu, bạn có thể chỉ cần một bảng đơn giản.

Hãy xem xét trước hết rằng thông thường EEPROM cho phép từ 1000 đến 100000 chu kỳ ghi. Nó có nghĩa là, nếu bạn viết một ô đơn lẻ hơn 100000 bạn có xác suất cao mà tế bào của bạn chết, bạn không thể viết nó nữa.

Câu hỏi đặt ra là, có bao nhiêu thông tin đăng nhập được phép? Đó là vấn đề chọn cấu trúc dữ liệu phù hợp và hiểu số lượng bộ nhớ cần thiết là bao nhiêu.

Biết sức mạnh tính toán của Arduino: Nếu thông tin đăng nhập chỉ là 2 .. 50, danh sách đơn giản sẽ là đủ. Chèn vào cuối là O (1), xóa là O (n), tra cứu là O (n). Tuy nhiên, danh sách liên kết sẽ cho phép bạn giảm số lần ghi để xóa một giá trị nhỏ không đổi.

Nếu thông tin đăng nhập nhiều hơn, 50 .. 1000, một mảng được sắp xếp với tìm kiếm nhị phân là đủ. Chèn là O (n), xóa là O (n), tra cứu là O (n log n). Tuy nhiên, số lượng ghi là O (n) cho cả việc xóa và chèn, và vì việc viết chậm và có thể ghi các ô, nó phụ thuộc vào số lượng cập nhật bạn muốn làm.

Nếu thông tin đăng nhập là 1000 hoặc nhiều cây nhị phân tốt. Chèn là O (n log n), xóa là O (n log n), tra cứu là O (n log n). Điều tốt là để chèn và xóa bạn chỉ cần một số lượng nhỏ, liên tục viết.

Cũng là một hashtable là tốt, nhưng họ thường sử dụng nhiều bộ nhớ hơn. Chèn là trung bình O (1), xóa là trung bình O (1), tra cứu là trung bình O (1). Chèn và xóa chỉ đòi hỏi một số lượng nhỏ các hoạt động ghi liên tục, ít hơn một cây nhị phân. Như tôi đã nói, cấu trúc dữ liệu này sử dụng nhiều bộ nhớ hơn, tốc độ đi kèm với chi phí.

Bạn không cần một cơ sở dữ liệu quan hệ thực sự, nhưng có lẽ nếu bạn cần quá nhiều người dùng, bạn cần một EEPROM bên ngoài.

Tất nhiên, bạn phải lưu dữ liệu này trong bộ nhớ flash, nội bộ hoặc bên ngoài hoặc bạn sẽ mất cơ sở dữ liệu khi bạn đặt lại hoặc tắt nguồn máy.

Chúng tôi cũng có thể nói rằng bạn không cần phải lưu trữ tên người dùng và mật khẩu, bạn chỉ có thể lưu trữ một băm mật khẩu và tên người dùng. Nếu tên người dùng và mật khẩu băm tồn tại, thì bạn có thể cho phép đăng nhập. Bằng cách này, bạn có thể sử dụng bộ nhớ kích thước cố định và bộ nhớ ít hơn. Bạn có thể sử dụng MD5, đó là điện thoại Android có để gửi MD5 băm, đó là, 16 byte, do đó, Arduino phải chỉ kiểm tra nếu MD5 băm tồn tại trong danh sách người dùng ở đó, ví dụ. Và điều này rất dễ dàng và nhanh chóng.

+0

+1 Cảm ơn bạn đời, điều này rất hữu ích :) –

0

Vì bạn đang sử dụng conection bluetooth, bạn chỉ cần xác thực địa chỉ MAC của điện thoại o thông tin độc đáo khác.

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