GithubHelp home page GithubHelp logo

systems-assignment's Introduction

Key-Value Server

Your job is to build a simple key-value server for immutable data.

To make the task easier, the server only serves read-only data that is provided in a separate file. The data doesn't need to be mutated in any way by the server. Clients need to be able to contact the server over network (you can choose the protocol), send a query containing a key, and the server will answer with the corresponding value from the dataset, if the given key exists.

The key-value data is provided in the following format:

3479d894-3271-4935-88cf-a06f3cbb80a5 this is a value
f8a24bb8-eff8-41dc-929b-10b4c3e49e05 1234
0cdfafb5-edb4-48a6-a7ec-5b1a75831f91 here is another value

The first column contains the key which is always a valid UUID (version 4). A single space chacterter separates the key from the value that is the rest of the line until a newline (\n) character. You can use an example data file stored in this repository, example.data, for testing.

You are free to use any common programming language for your implementation. You can choose to use either HTTP or TCP for communication with the server. You can decide the details of the protocol. Your server should accept a single command line argument during startup that defines a path to the data file.

In addition to implementing the server, provide an example how a client can request data from the server. The client will provide only a key, e.g. f8a24bb8-eff8-41dc-929b-10b4c3e49e05, and the server needs to provide the corresponding value in the response, in this case, 1234.

You can implement the server and the example client as you see fit. Your implementation should be able to handle files that contain up to a million key-value pairs.

Important: You should be able to explain how your system works in detail and answer follow up questions like these:

  • How much data can your server handle? How could you improve it so it can handle even larger datasets?
  • How many milliseconds it takes for the client to get a response on average? How could you improve the latency?
  • What are some failure patterns that you can anticipate?

While you are allowed to use external libraries as a part of your solution, you should be prepared to explain in detail how these libraries work internally. If you are unsure about their internals, it is better to avoid using them and go with a simpler, more understandable approach instead.

The point of this exercise is not so much the code itself. Please don't spend more than 1-2 hours solving this problem. If you have ideas about how to improve your solution if more time was available, save them for the follow-up discussion about possible improvements and their relative pros and cons. For this reason, the question is deliberately open-ended - there is not a single right answer or any tricks or gotchas.

You can use any language to provide a solution. It is ok to implement your solution in a high-level language such as Python. We evaluate speed and scalability in terms of data structures and algorithms you chose rather than overhead caused by the language.

You can share your solution (which can be just one file or more, if needed) either as a private repo or as an email attachment at [email protected]. Naturally feel free to ask me if anything seems unclear!

systems-assignment's People

Contributors

savingoyal avatar

Watchers

 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.