NYCPHP Meetup

NYPHP.org

[nycphp-talk] DB servers and abstraction layers

Kenneth Downs ken at secdat.com
Wed Aug 17 17:29:25 EDT 2005


The best system is usually the one that works, and if you are comfortable
with mySQL then that is the one that works  :)

Let us know how this turns out.

> I'll likely use ADODB  as a DB abstraction layer - they even have a C
> module. That should keep my options open.
> I like ADODB but I haven't used php's dbx or PEAR db either.
> I am not sure if some db features won't be available to me, like certain
> kinds of indexes or table types that I am used to setting in MySQL.
> As for Postgres, I fear the complexity a bit.
>
>
> Kenneth Downs wrote:
>
>>My experience in db servers is limited to MS SQL Server, IBM DB/2 and
>>Postgres.  Postgres is the one I pick when the decision is mine.  The
>>others I really cannot comment on.
>>
>>Also, as for the table design, a google search on both web pages and
>>newsgroups should yield some pre-existing solutions.
>>
>>
>>
>>>Going off topic:
>>>
>>>Thinking of ways to persist the graph :
>>>I've used MySQL a long time and see them as only getting better. But
>>>their dual license deters me from some uses. - what about SQLite - also
>>>completely free (LGPL, MIT, or Apache  License I think), small, and
>>> fast?
>>>Or dbm functions if I only need to store hashes?
>>>
>>>I'll feel silly if I reinvent the work of the RAP RDF datastore. I'll
>>>have to write tests and a couple implementations so I can know what is
>>>faster and more efficient.
>>>
>>>
>>>
>>>
>>>Kenneth Downs wrote:
>>>
>>>
>>>
>>>>Jonathan,
>>>>
>>>>Glad this helped.
>>>>
>>>>If your graphs get big then you must do this in a database, don't
>>>> attempt
>>>>it in scripts.
>>>>
>>>>Many people recommend mySQl because it is free, but PostgreSQL is far
>>>>more
>>>>capable and is also free.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>>Hi Kenneth,
>>>>>
>>>>>Thanks very much. I like what you have posted!
>>>>>I think I would add keys to the arrays and add one more dimension so
>>>>>that there can be multiple graphs with the same label.
>>>>>
>>>>>$arcs['likes'][]  = array('a','a');
>>>>>$arcs['likes'][]  = array('a','b');
>>>>>$arcs['knows'][]  = array('a','b');
>>>>>
>>>>>$arcs['knows'][]  = array('b','a');
>>>>>$arcs['confusedby'][]  = array('b','a');
>>>>>
>>>>>I can get the functionality I need from this.
>>>>>I wonder how scalable this is. What if there are over 5 million arcs.
>>>>> My
>>>>>traversal algorithms would have to be very efficient.
>>>>>
>>>>>Another package I am looking at for graph manipulation is bundled with
>>>>>the PHP RDF package RAP.
>>>>>
>>>>>http://www.wiwiss.fu-berlin.de/suhl/bizer/rdfapi
>>>>>http://www.wiwiss.fu-berlin.de/suhl/bizer/rdfapi/tutorial/usingNamedGraphs.htm#ng-intro
>>>>>
>>>>>They use quads - where a quad is a labeled graph. In the above data
>>>>>structure, a new graph would just be a new set of arcs. So it looks
>>>>> like
>>>>>nothing is missing from this array based graph.
>>>>>
>>>>>Hmm, or why not
>>>>>
>>>>>$arcs['a']['likes']['b'] = true;
>>>>>$arcs['b']['likes']['b'] = false;
>>>>>or
>>>>>$arcs['b']['likes']['chocolate'][] = '80%';
>>>>>$arcs['b']['likes']['chocolate'][] = 'quite significantly';
>>>>>
>>>>>Then I can have a "triple" with a label and a value.
>>>>>
>>>>>This could be interesting.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>Kenneth Downs wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>Johathan,
>>>>>>
>>>>>>Have you considered putting the nodes into one array, and the arcs
>>>>>> into
>>>>>>a
>>>>>>second?
>>>>>>
>>>>>>$nodes = array('a'=>array(..info..),'b'=>array(..info..));
>>>>>>
>>>>>>$arcs = array(array('a','b'),array('b','a'))
>>>>>>
>>>>>>This allows each node's info to be stored only once, and allows you
>>>>>> to
>>>>>>then treat the arcs cleanly, allowing or disallowing any combo you
>>>>>> may
>>>>>>choose.
>>>>>>
>>>>>>You may have to write a little of your code to walk through things,
>>>>>> but
>>>>>>you'll have complete integrity and control.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>>I'm trying to formulate a question out of this. If there isn't one
>>>>>>>here,
>>>>>>>I hope the read is interesting.
>>>>>>>My goal is to create the simplest efficient graph data structures -
>>>>>>>that
>>>>>>>allow for cycles.
>>>>>>>
>>>>>>>The reason one would want cycles in a graph is the following:
>>>>>>>a->b
>>>>>>>and
>>>>>>>b->a
>>>>>>>(or b->a again with another arc (also known as a hypergraph))
>>>>>>>or
>>>>>>>a->a
>>>>>>>
>>>>>>>where '->' is an arc
>>>>>>>Even if the arcs are labled, the data in 'a' is something I don't
>>>>>>> want
>>>>>>>to duplicate.
>>>>>>>
>>>>>>>I am using php version 4.3.11
>>>>>>>
>>>>>>>If I try to do this with a simple php array:
>>>>>>>
>>>>>>>  $a = array();
>>>>>>>  $b = array();
>>>>>>>
>>>>>>>  $a['b'] = & $b;
>>>>>>>  $b['a'] = & $a;
>>>>>>>
>>>>>>>  print_r($a);
>>>>>>>
>>>>>>>Array
>>>>>>>(
>>>>>>>  [a] => Array
>>>>>>>      (
>>>>>>>          [b] => Array
>>>>>>>              (
>>>>>>>                  [a] => Array
>>>>>>>*RECURSION*
>>>>>>>              )
>>>>>>>
>>>>>>>      )
>>>>>>>
>>>>>>>)
>>>>>>>
>>>>>>>
>>>>>>>I get this recursion error. Or, perhaps this is not an error at all.
>>>>>>>But
>>>>>>>I can't seem to use this function:
>>>>>>>
>>>>>>>  function recursive_print($array)
>>>>>>>  {
>>>>>>>      foreach($array as $key => $value)
>>>>>>>      {
>>>>>>>          if (is_array($value))
>>>>>>>          {
>>>>>>>              echo $key .' <hr /> ' .recursive_print($value);
>>>>>>>          }
>>>>>>>          else
>>>>>>>          {
>>>>>>>              echo 'end'.$value;
>>>>>>>          }
>>>>>>>      }
>>>>>>>  }
>>>>>>>
>>>>>>>So I went to the PEAR site -
>>>>>>>http://pear.php.net/package/Structures_Graph
>>>>>>>This pear package doesn't throw any errors but it also seems to balk
>>>>>>>-
>>>>>>>although I am not sure the *RECURSION* will affect functionality
>>>>>>>
>>>>>>>
>>>>>>>  include 'Structures/Graph.php';
>>>>>>>  $directedGraph =& new Structures_Graph(true);
>>>>>>>  $nodeOne =& new Structures_Graph_Node();
>>>>>>>  $nodeTwo =& new Structures_Graph_Node();
>>>>>>>
>>>>>>>
>>>>>>>  $directedGraph->addNode(&$nodeOne);
>>>>>>>  $directedGraph->addNode(&$nodeTwo);
>>>>>>>
>>>>>>>
>>>>>>>  $nodeOne->connectTo($nodeTwo);
>>>>>>>  $nodeTwo->connectTo($nodeOne);
>>>>>>>
>>>>>>>
>>>>>>>Inside the code I found a comment about the Zend engine before the
>>>>>>>data
>>>>>>>structure procedes to iteratively loop through the the nodes to see
>>>>>>> if
>>>>>>>there are duplicates.
>>>>>>>          /*
>>>>>>>           ZE1 equality operators choke on the recursive cycle
>>>>>>>introduced by the _graph field in the Node object.
>>>>>>>           So, we'll check references the hard way
>>>>>>>          */
>>>>>>>
>>>>>>>Even so, print_r produces many recursion warnings.
>>>>>>>
>>>>>>>Maybe I am just trying to use a hammer for a screwdriver. But can
>>>>>>>anyone
>>>>>>>offer any insight here?
>>>>>>>
>>>>>>>Thanks,
>>>>>>>
>>>>>>>- Jonathan Hendler
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>_______________________________________________
>>>>>>>New York PHP Talk Mailing List
>>>>>>>AMP Technology
>>>>>>>Supporting Apache, MySQL and PHP
>>>>>>>http://lists.nyphp.org/mailman/listinfo/talk
>>>>>>>http://www.nyphp.org
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>_______________________________________________
>>>>>New York PHP Talk Mailing List
>>>>>AMP Technology
>>>>>Supporting Apache, MySQL and PHP
>>>>>http://lists.nyphp.org/mailman/listinfo/talk
>>>>>http://www.nyphp.org
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>>
>>>_______________________________________________
>>>New York PHP Talk Mailing List
>>>AMP Technology
>>>Supporting Apache, MySQL and PHP
>>>http://lists.nyphp.org/mailman/listinfo/talk
>>>http://www.nyphp.org
>>>
>>>
>>>
>>
>>
>>
>>
>
> _______________________________________________
> New York PHP Talk Mailing List
> AMP Technology
> Supporting Apache, MySQL and PHP
> http://lists.nyphp.org/mailman/listinfo/talk
> http://www.nyphp.org
>


-- 
Kenneth Downs
Secure Data Software
631-379-0010
ken at secdat.com
PO Box 708
East Setauket, NY 11733




More information about the talk mailing list