数据系统,简单来说就是一个提供数据存储和搜索的软件。当你传入数据给数据系统时,它会把数据存储起来;当你需要你存入的数据时,数据系统会返回给你。现在我们就来看看数据系统是如何存储和搜索数据的吧。
先来看一段代码:
def db_set(key, value):
with open('database','a') as f:
f.write('%s,%s\n'%(key, value))
def db_get(key):
temp = []
with open('database','r') as f:
for data in f.readlines():
if key == data.split(',')[0]:
temp.append(data)
print(temp[-1])
这是一小段python的代码,但是实现了数据系统过的数据存储和搜索的功能。db_set函数用于将数据不断添加存入到database这个文件中,而db_get函数则是搜索database文件,找到匹配的key,返回这个结果。让我们再来仔细看看这两个函数。
存储的文件格式很简单,分隔符为英文逗号,和CSV这种格式一样,database文件里面每一行包含着一个键值对。每一次调用db_set只是将数据简单的添加到database文件后面,如果添加进同一个键值,就需要在db_get函数,每次都返回最新的数据。显然db_set函数的性能相当优秀,因为数据仅仅只是添加到最后,而没有其它的任何操作。在一般的数据库里,database文件可以理解为log单纯只是添加数据,当然真正的数据库对于log的处理很复杂,但是核心就是这样的。
另一方面,db_get函数就稍微有些复杂了,因为它需要遍历整个database文件,显然性能不能令人满意。为了更有效率的搜索文件,就诞生了索引的概念。索引是独立于database文件的数据结构,基本上所有数据库都会向使用者提供索引,不过索引需要额外的精力去维护,对于写的性能有很大的影响。
这就是一个trade-off了,良好的索引可以加速读的性能,但是减小写的性能。所以索引不是数据库的默认选项,而是需要使用者谨慎的选择。
哈哈,标题党了一会,不过一个数据库确实逃不过存储和搜索两个话题,这篇文章算是揭开了数据库一点点的迷雾
领取专属 10元无门槛券
私享最新 技术干货