From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Julian Graham Newsgroups: gmane.lisp.guile.user Subject: Re: [ANN] gzochi project development release 0.10 Date: Sat, 13 Aug 2016 14:33:26 -0400 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 X-Trace: blaine.gmane.org 1471113238 5577 195.159.176.226 (13 Aug 2016 18:33:58 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sat, 13 Aug 2016 18:33:58 +0000 (UTC) Cc: Guile Users , guile-user To: Amirouche Boubekki Original-X-From: guile-user-bounces+guile-user=m.gmane.org@gnu.org Sat Aug 13 20:33:55 2016 Return-path: Envelope-to: guile-user@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bYdko-0001JK-8o for guile-user@m.gmane.org; Sat, 13 Aug 2016 20:33:54 +0200 Original-Received: from localhost ([::1]:58242 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bYdkl-0002Sh-BR for guile-user@m.gmane.org; Sat, 13 Aug 2016 14:33:51 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:45870) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bYdkQ-0002SW-0o for guile-user@gnu.org; Sat, 13 Aug 2016 14:33:30 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bYdkO-0005GI-0L for guile-user@gnu.org; Sat, 13 Aug 2016 14:33:28 -0400 Original-Received: from mail-qt0-x243.google.com ([2607:f8b0:400d:c0d::243]:34414) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bYdkN-0005Fc-SB; Sat, 13 Aug 2016 14:33:27 -0400 Original-Received: by mail-qt0-x243.google.com with SMTP id c52so681968qte.1; Sat, 13 Aug 2016 11:33:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=zvLTqdcGxh3NE7r0PZYZfekAp2zuh446ibTd4c3Ljks=; b=uBklp94RBx/oYdXBaUWQJMGMdkNFnAMc9K5W3+CyIshDK6dd3Jk0z+kh1BpIK2PGTX gRWq52tqGU4SWnuHocrwaN3OuV9bhoMqFDu7KnbP/TOIPEYjhTwSctj38N7AQHFvC37r dLJ9BFtjRQ9Y7lp8nd5a3eW8LrqLDQ6KOjQdeiv4EBjBzbuFXLwaRJdI0wLvfgsO4u4J ty6pthfYjQhcL6sKZc6m/SvT+To4v6IpOd/NE9EQN2Xy/CIM7wogU3tXYHbMxoDcqbPD cApWR6yyCKwvqX79qAI4th8ZiVW5d79s+hoYsOG6A0K7KCr6SM7MNcmsHywdLEikQxd6 OrrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=zvLTqdcGxh3NE7r0PZYZfekAp2zuh446ibTd4c3Ljks=; b=W4LqSlKRXF8yKqrUvMxUDRYJMeQwGOz9UOZneC3ZACBg6g9u2x03IdHlQp1EpbgZnR 9Hh4fLJtgGb7abDndCrv+q3Oem+ZcqmqN+KFEaTmeyC+fVQXWPzd9oAkXwdNVpvw3uUx 3fEKJ+lg4mAvmkj23nRQsFoo9+NbXUPBxDZyICc7hmjoABl3A0nTRWiT05dwZBpUXNbM N5jSjvHuu8utpk63A+jYddhr9OytaKOmPSPy3SVzFfEkc8WSOUfyD5eROaPckvsDyceu 2aCNlPiuH9hn7C7ZrmFQIeJrb8SvMy4GILDv85bE2dWNGUgI8Q1JXd1qnnwGo/MR+6m6 i/+A== X-Gm-Message-State: AEkoouv2GxM0mLOzxS2ltjEGnWbp4ipQPCuOwcnUxaaul6y76q+o3gsAycEtP6LzIgQtjUzi1UizsepO/xCV3Q== X-Received: by 10.237.55.225 with SMTP id j88mr24228318qtb.131.1471113207013; Sat, 13 Aug 2016 11:33:27 -0700 (PDT) Original-Received: by 10.237.44.65 with HTTP; Sat, 13 Aug 2016 11:33:26 -0700 (PDT) In-Reply-To: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:400d:c0d::243 X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.org gmane.lisp.guile.user:12836 Archived-At: Hi Amirouche! > Can you explain in more details what this B+tree based storage engine is? > And what is used for? Sure! Some context: gzochi is an application server for games written in Guile. It provides various services to the applications that it hosts, including data storage. The underlying implementation of the data store (the "storage engine") is configurable - the framework comes with a Berkeley DB storage engine and an in-memory storage engine. (And you can write your own, if you wish.) All of the data structures manipulated by a game running in the gzochi container - the game's "object graph" - are serialized and persisted to the data store. The container guarantees a consistent view of the object graph to each "task" that runs as part of the game, and it handles changes to the graph transactionally. It's up to the storage engine implementation to make sure that every transaction is isolated from every other transaction, that deadlocks are resolved properly, that each transaction either commits or rolls back atomically, etc. The Berkeley DB-based storage engine relies on BDB for those things. The in-memory engine uses a B+tree and intentional (R/W) locking to implement transactions. The B+tree storage engine has a second function when running gzochi in a distributed / high-availability configuration: It's used to cache a subset of the object graph on each node in the cluster while that node is executing game code that manipulates that part of the graph. (In this configuration, the centralized "meta server" is responsible for storing and retrieving the canonical version of the object graph.) Does that answer your question? Regards, Julian