Giter VIP home page Giter VIP logo

lab03's Introduction

Lab03

Introduction

本期任务的目的是让你们了解POSIX (Unix) 的网络API。网络是一个庞大的分布式系统,它使得不同计算机之间可以相互通信,是个十分神奇 (玄学) 的东西。

Tasks

实现一个内存数据库(即是把数据文件保存在内存中的数据库,Redis就是一个内存数据库)。

Basic Requirements

实现语言最好是C、C++、Go等,不建议使用python这样的脚本语言。

程序要能够在Unix(Linux)环境下运行。

要求参照Redis的接口,实现对string类型的SET,DEL,EXIST,GET操作

请以Client/Server模型实现,即是要有一个客户端和服务器端。服务器端应该是稳定可靠,可长期运行的,要求能够同时接受多个客户端的连接。客户端通过网络与服务器端建立通信,接受用户的输入并向服务器发送请求以完成相关操作。客户端可以不实现,但是要实现与服务器连接的接口(像hiredis一样)。

Advanced Topics

实现MULTI,EXEC以支持原子操作。参考资料建议自行Google,这里放出一个Wikipedia。

实现分布式数据库。即是由多个服务器端一起共同组成一个分布式系统,来提供数据库服务。分布式数据库应该有一定的容错性,也就是要处理宕机、数据冲突之类的情况。还可以实现负载均衡之类的功能。接口参照hiredis-vip。

支持更多数据结构和其相关操作。HASH,LIST,SET,ORDERED SET等。

如果实现了客户端,可以想办法提高系统的安全性,譬如说防止SQL注入。

实现多客户端、分布式系统的时候,注意保证操作的正确性,注意race condition等等。

使用日志、快照等实现数据的持久化,也就是把内存里的数据存到硬盘中。要注意持久化不应该大幅度的影响数据库的读写速度,也就是持久化开启前后数据库IO性能应该基本不变。

服务器编译方法:make 客户端编译方法: cd hiredis gcc -lhiredis test.cpp -o test

服务器运行方法:./server 客户端运行方法:./test

完成情况

12.3 初始版本未完成...客户端可以发送到服务器...但是服务器不能发送到客户端...debuging

1.24 太懒了 实现功能: SET xxx xxx(字符串长度都不超过9 GET xxx EXIST xxx(只支持一个串的查询 DEL xxx(只支持一个串的删除 不想写其他的了...咕咕咕

依旧存在的bug: 服务器运行后,客户端第一次可以连接,但是第二次就select不到了,至今未找到bug

1.25 基本debug结束,但是手段非常...奇怪? 没有找到bug的根源,暴力修改了,十分丑陋(

1.28 发现了某小错误,关于字符串的正确使用姿势++ sizeof("$")==2 不听课的后果23333 网络一点都不好玩

lab03's People

Contributors

alisahhh avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.