如何在Arduino中存储数据库?

5
我正在处理一个项目,该项目中我使用了一个带有蓝牙模块的Arduino和Android操作系统的我的手机三星Galaxy S II。 该项目的想法是通过蓝牙从我的手机向Arduino发送一些命令。 我想在Arduino上包含一个数据库,当我从手机发送登录信息时,Arduino将检查数据库,如果登录信息匹配,则检索数据库中的一些数据并将其发送到我的手机。

我该如何在Arduino内部存储数据库? 我需要购买外部EEPROM或RAM吗? 我该如何处理该数据库(添加,删除和操纵数据)?

顺便说一下,我的Ardunio类型是UNO


1
这个问题太过宽泛,不适合在SO上回答。你基本上是在问“我该如何做所有这些事情?”但你甚至没有做足够的研究来提出正确的问题。 - Brian Roach
@BrianRoach 我只是在问正确的做法,我并不需要细节。 - Eng.Fouad
1
@Eng.Fouad请避免在这种情况下使用“数据库”一词,因为数据库与您所需的完全不同。请参见Wikipedia - A.H.
2个回答

7

对于简单的登录,您不需要数据库,可能只需要一个简单的表格。

首先考虑,通常EEPROM允许从1000到100000次写入循环。这意味着,如果您写入单个单元格超过100000次,则有很高的概率您的单元格会死亡,您将无法再次写入它。

问题是,允许多少次登录?这完全取决于选择正确的数据结构并了解所需内存量。

了解Arduino的计算能力:如果登录仅为2..50,则简单的列表就足够了。在末尾插入是O(1),删除是O(n),查找是O(n)。但是,链接列表将使您将删除的写入数减少到一个恒定的小值。

如果登录更多,50..1000,则排序的带二进制搜索的数组就足够了。插入是O(n),删除是O(n),查找是O(n log n)。但是,删除和插入的写入次数均为O(n),由于写入速度较慢且可能会烧毁单元格,因此这取决于您想要执行的更新数量。

如果登录为1000或更多,则二叉树很好。插入是O(n log n),删除是O(n log n),查找是O(n log n)。好处在于,对于插入和删除,您只需要进行少量的写操作。

哈希表也很好,但它们通常使用更多内存。插入平均为O(1),删除平均为O(1),查找平均为O(1)。插入和删除仅需要少量恒定的写操作,少于二叉树。正如我所说,这种数据结构使用更多内存,速度是有代价的。

您不需要真正的关系数据库,但如果您需要太多用户,则需要外部EEPROM。

当然,您必须将此数据保存在闪存中,内部或外部,否则在重置或关闭机器时将丢失数据库。

我们还可以说,您不需要存储用户名和密码,只需存储密码和用户名的哈希值即可。如果存在哈希的用户名和密码,则可以允许登录。这样,您可以使用固定大小的内存和较少的内存。您可以使用MD5,Android手机必须发送MD5哈希,即16个字节,因此Arduino只需检查该MD5哈希是否存在于用户列表中即可。


0

由于您正在使用蓝牙连接,因此可以简单地验证手机的MAC地址或其他唯一信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接