Thanks for all your answers, Everything said makes sense. I will get
back to you guys with what we end up doing in case it is of any value
for anyone else.

2010/1/4 Craig Taverner <cr...@amanzi.com>:
> I think a generic solution would mean a generic numerical index.
>
> I wrote an index recently that is very similar in principle to the timeline
> index Tobias mentioned below, except I allow multiple dimensions and
> indexing over any numerical primitive type. Then we get to the next point,
> combining indexes. Like in Tobias example: "give me all nodes where x=15
> ordered by y". This requires an index that works on x and y at the same
> time. Otherwise you have to index one, and do a brute force search on the
> other in the result set.
>
> I have an idea about dynamically generating a combined index based on
> queries received by the database. So if the user does a query like the one
> above, involving both x and y, and both of these are indexed, then a
> combined index can be added dynamically. The first query will not be fast,
> but subsequent ones would be.
>
> And as far as I can see, a combined index should be as simple as linking
> nodes between the un-combined indexes. Now who's up for a n-way combination
> of k-dimensional indexes? I think I'm getting a headache just thinking about
> it :-)
>
> On Mon, Jan 4, 2010 at 10:17 AM, Raul Raja Martinez <raulr...@gmail.com>wrote:
>
>> Hi Tobias,
>>
>> Thanks for the info!
>>
>> I understand the implications of returning ordered nodes.
>> Do you guys plan to build such support natively to neo4j even if it is
>> for a basic set of node properties?
>>
>> While retrieving results ordered by property values or more extensive
>> queries capabilities is provably not easy when dealing with a graph,
>> it is currently one of
>> the main things a programmer encounters when comparing neo4j to
>> relational databases for storage and info retrieval.
>>
>> Would it make sense to have something like
>> node.setOrderedProperty(property, value); so that the linked list
>> based on the natural order of the value is kept internally by neo4j
>> and then have another param in the traversers to specify that the
>> traversal should follow the relationships established by the ordered
>> linked nodes?
>>
>> If you guys think ordering based on property is out of the scope
>> that's fine, I'm just asking in case we can avoid having to roll our
>> own hack or component to get it working since ordered entities is a
>> requirement in all of our current projects where we plan to use neo4j
>>
>> Thanks
>>
>> Raul
>>
>>
>> 2010/1/4 Tobias Ivarsson <tobias.ivars...@neotechnology.com>:
>> > Getting ordered results from any system always requires sorting, unless
>> the
>> > ordering property is stored. And sorting always requires (at least) O(n)
>> > memory and O( log(n!) ) time for comparison sort, possibly O( n ) time
>> for
>> > sorting integer keys.
>> >
>> > So if you want results to be sorted on an arbitrary property you will
>> have
>> > to sort the entire result set and keep it around during your pagination
>> > process (possibly redoing the query + entire sorting + skipping a few
>> pages,
>> > to preserve memory).
>> >
>> > If you know which properties you will want to order your results by when
>> you
>> > are designing your database you can store the ordering information in the
>> > database. I would suggest a linked list of relationships in between the
>> > nodes, in the natural order for the sorting property.
>> >
>> > You need to be aware of two things with this approach though.
>> > The first one is that if the sorting property is unrelated to the
>> filtering
>> > property, if you want something like "give me all nodes where x=15
>> ordered
>> > by y", you will either have to store separate linked lists for each value
>> of
>> > x, filter the result set while traversing through the results as they are
>> > ordered by y, or revert to the sorting approach.
>> > The second thing to be aware of is that insertion (and changing the value
>> of
>> > the ordering property in some node) will require some overhead, to
>> preserve
>> > the order.
>> >
>> > If your queries are as simple as "give me all nodes where x>LOWER_LIMIT
>> and
>> > x<UPPER_LIMIT ordered by x", and you can reduce the x property to a long
>> > integer value, then the timeline index will do this for you. Otherwise
>> there
>> > is no ready made component for this today.
>> >
>> > Happy hacking,
>> > Tobias
>> >
>> > On Mon, Jan 4, 2010 at 1:30 AM, Raul Raja Martinez <raulr...@gmail.com
>> >wrote:
>> >
>> >> Hi,
>> >>
>> >> Anybody has any experience returning indexed nodes ordered by a given
>> >> property?.
>> >> For example return all nodes ordered by creationDate. I understand that
>> if
>> >> the node property is not indexed I'd have to iterate over all nodes
>> first
>> >> then order then limit the results which seems overkill to me.
>> >> I'd like to be able to do... "get me all nodes from start to limit
>> ordered
>> >> by property".
>> >> This is necessary when the data is iterated over using pagination and
>> the
>> >> order determines what the next start node is next.
>> >> _______________________________________________
>> >> Neo mailing list
>> >> User@lists.neo4j.org
>> >> https://lists.neo4j.org/mailman/listinfo/user
>> >>
>> >
>> >
>> >
>> > --
>> > Tobias Ivarsson <tobias.ivars...@neotechnology.com>
>> > Hacker, Neo Technology
>> > www.neotechnology.com
>> > Cellphone: +46 706 534857
>> > _______________________________________________
>> > Neo mailing list
>> > User@lists.neo4j.org
>> > https://lists.neo4j.org/mailman/listinfo/user
>> >
>>
>>
>>
>> --
>> Raul Raja
>> _______________________________________________
>> Neo mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>>
> _______________________________________________
> Neo mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>



-- 
Raul Raja
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to