Insert the given meta data into the database

        :param tag: The tag (equates to meta_data_id)
        :param identifier: The identifier (a combination of the meta_data_id and the plate value)
        :param parent: The parent plate identifier
        :param data: The data (plate value)
        :return: None

def insert(self, tag, identifier, parent, data):
        """
        Insert the given meta data into the database

        :param tag: The tag (equates to meta_data_id)
        :param identifier: The identifier (a combination of the meta_data_id and the plate value)
        :param parent: The parent plate identifier
        :param data: The data (plate value)
        :return: None
        """
        # First try to add it into the tree
        if self.global_plate_definitions.contains(identifier):
            raise KeyError("Identifier {} already exists in tree".format(identifier))

        self.global_plate_definitions.create_node(tag=tag, identifier=identifier, parent=parent, data=data)

        # Now try to add it into the database
        with switch_db(MetaDataModel, 'hyperstream'):
            meta_data = MetaDataModel(tag=tag, parent=parent, data=data)
            meta_data.save()

        logging.info("Meta data {} inserted".format(identifier))