Code Examples (The Basics)


Add mishmash io to your project:

$ npm install mishmash-io
$ pip3 install mishmash-io-client

Import and instantiate:

const Mishmash = require('mishmash-io')

mishmash = new Mishmash()
from Mishmash import Mishmash

mishmash = Mishmash()

You are now connected and mishmash will 'hold' all your data as if it was in the local memory of your app.

There is no API or framework beyond the simple use of 'local' to your app 'mishmash' variables.

To store data, just assign values, arrays and objects to the properties of a mishmash variable:

mishmash.myObjects[] = {
  "a": 42,
  "b": "a lazy dog",
  "c": [obj1, obj2]
}
mishmash.myObjects = {
  "a": 42,
  "b": "a lazy dog",
  "c": [obj1, obj2]
}

That's it - your data is stored and available for later use under mishmash.myObjects.

As a database, mishmash io has no schema. It just uses whatever 'schema' you create by the way you organize and store your data.

To pull data into your app, just loop over a mishmash variable:

for (o in mishmash.myObjects) {
  if (o.a === 42) {
    // do something
  }
}
for o in mishmash.myObjects:
  if o.a == 42:
    # do something

The body of the for loop will now operate on your app server with data arriving from the mishmash io cluster. However, remember that this will only run at the speed of your app server and network.

To make your code run faster than that, see the advanced examples below.


Code Examples (Advanced)


When building 'mishmashes' - those portions of the data that your code needs to work on - you don't have to strictly follow the hierarchy of properties, members and indexes that you created when you stored the data.

To simplify your work, you can grab the data items at any level:

mishmash_b = mishmash.b
mishmash_dogs = mishmash['a lazy dog']
mishmash_b = mishmash.b
mishmash_dogs = mishmash['a lazy dog']

And you can build mishmashes by putting together or slicing apart completely unrelated branches of your data:

cake = mishmash('chocolate', 
                'bananas')

coffee = mishmash.coffees.black
cake = mishmash('chocolate', 
                'bananas')

coffee = mishmash.coffees.black

There's much more that you can do to build mishmashes - scroll down to find out more.

To achieve super-fast execution of complex logic, don't pull data into the app - instead, push your code into the mishmash io cluster:

mishmash.myObjects(
  function(input) {
    for (o in input) {
      if (o.a === 42) {
        // do something complex
      }
    }
  }
)
def function(input):
  for o in input:
    if o.a == 42:
      # do something complex

mishmash.myObjects(function)

The supplied function will now be automatically optimized and 'executed' in parallel across all cluster nodes that contain portions of myObjects and any other input.

The code is transformed into a 'parallel' equivalent by combining syntax analysis and knowledge of input data.

Learn mishmash io through examples.

We developed a little app that analyzes football data to automatically find interesting statistics about the next match.

The details on how we did it are a great place to get started with mishmash io.

More in-depth examples will be added soon.

Follow us on Social Media where we will also publish material on topics like algorithms, Machine Learning, AI and more.


The inner workings of mishmash io


mishmash io is a distributed database (DBMS) of a new kind - specifically designed to handle complex, algorithmic queries with speed.

It scales easily to thousands of computers and the more data-driven logic you push to it, the more it will speed up your app.

As a starting point in learning how mishmash io achieves this - take a look at the architecture.

Data stored in mishmash io is not organized into keys, values, tables, graphs, etc. It is broken down into seemingly unrelated chunks (also called 'mishmashes') whose purpose is to allow maximum parallelism for the code that will operate on them.

The mishmashes are scattered around cluster nodes so that more of these nodes can work simultaneously on a given algorithm.

Most importantly, this way of organizing data gives mishmash io the ability to perform operations in a time that is independent of the size of the data set, and answer questions such as:

  • which mishmashes sum to the complete set of data objects?
  • which sets split the data into parts nearly equal in size?
  • ...or into sets that do not overlap?

and many more...

When application code is pushed to mishmash io:

  • Its syntax is analyzed to determine how input data affects its branches, states and outcomes. This forms an understanding of all possible alternative ways of solving the same problem.
  • Advanced logic then chooses the combination of input mishmashes that allows the greatest degree of parallel processing.
  • The original code is transformed into 'parallel' pieces for each of the input mishmashes.
  • These pieces of code are distributed to nodes where the code is executed on the corresponding mishmashes in parallel.

Take a look at this very simple example on how mishmash io parallelizes automatically.


Features


No data model or schema

Your application logic doesn't need models or schemas - it needs objects, arrays, maps, etc.

Completely opaque database

All your data is available as if it was held in variables within the local memory of your application.

No query language

The query language is your application development language - Python, JavaScript, Java, Ruby, etc.

No frameworks, no APIs

Use the same for, if, etc statements and expressions you're already familiar with.

Massively parallel

Parallelizes your application code automatically and runs it across many nodes for almost real-time performance.

Handles arbitrary complexity

Write entire algorithms to explore similarity and 'likely' equality, to extract patterns, predict outcomes and many more - and build them directly in your app.


Why use mishmash io?


Build smart, predictive features for your app:

Data is the foundation for success in the digital age, and with mishmash io you can emulate the industry giants and explore your data to its maximum potential.

But use the skills you already have:

A software developer will be able to:

  • Handle massive amounts of data
  • Explore patterns in real-time
  • Develop predictive algorithms
  • Compute at scale and with speed
  • Give your users the features of the future!

One thing is obvious today - we're entering a new era in computing and software development: the era of Big Data, Machine Learning and AI. And their applications across industries are so broad that it is difficult to list all the reasons why they matter so much.

You can find some suggestions though on our case studies page.

And you can contact us - we promise to come up with ideas for you, perhaps too many! :)