From: Sergio <se...@st...> - 2009-08-28 19:36:52
|
Sorry if you already thought about this...I would not base on the fields directly, but on an Object. For example: I know there is some problems on my example codes, I just want to demonstrate my idea. class Person implements Persistable, Indexable { public int personId; public String fname; public String lname; // more code here public int hashCode() { return personId; } } I would build a class like this class PersonNameIndex implements Indexable { private Person p; public PersonIndex(Person p) { this.p = p; } public int hashCode() { // just an example... return 66 ^ fname.hashCode() ^ lname.hashCode(); } } Then on Floggy something like this: public ObjectSet pm.findByIndex(Indexable indexableObject, Object[] toFind) { //very complicated code here } To use it, would be like: ObjectSet objects = pm.findByIndex(new PersonNameIndex(somePerson, new Object[] { "João" }) ); Or: ObjectSet objects = pm.findByIndex(somePerson, new Integer[] { 10, 15, 17} ); // because Person class implements Indexable My original idea still apply, just an update, something like this would allow developers a more flexible indexing options. I'm insist on using hashCode() because it is already there for every object, there is no need to add an abstract method to Indexable. You said "except the hashCode method based thing", but there is really no other way of indexing a String object, for example. I hope you see my point here. Thiago Moreira (timba) wrote: > > Hey Sérgio, > > This is the exactly idea of index that I have, except the hasCode > method based thing. I want to do something wider based on the fields, > like having more than one index for the same Persistable (one based on > the name field and other based on bornDate field). > > Um abraço > > Thiago Moreira > > 2009/8/28 Sergio <se...@st... > <mailto:se...@st...>> > > Sorry I just like very very long e-mail :) > > Besides the two suggestions I already gave on my previous e-mail, > I have > another. Maybe this is the same that you are thinking of when you > referred to indexes on fields, but I'm going to throw it out there > anyway. > > When porting my application from .NET CF all my entities were base on > primary keys which is why I implemented the GetHashCode() of my > objects > based on the primary keys. When I created the entities for my j2me > application I coded the hashCode() which RMS makes no use at all, > which > I think is really stupid making my application dependent on some > random > ID number...anyway...My idea would be to add a mapping between > hashCode() and RMS ID. Something like: > > class ServiceOrder implements Persistable, Indexable { > public int orderId; // another performance hint, don't create > getters and setters, unless you really need it > // ... > public int hashCode() { > return orderId; // I'm 100% this WILL be unique between my > ServiceOrder entities > } > } > > The weaver would detect the Indexable interface on this entity and > create the map between "ServiceOrder.hashCode()" and the RMS ID. > Floggy > creates the RecordStore "ServiceOrdeIndex" order by hashCode(). > > Being ordered by hashCode() would allow a binary seach, even with 6000 > records this would be pretty much instant seach in my opinion. > Obviously, insertion and deletion of indexes would also need to be > addressed in a ordered manner. For this the best idea (for > performance), > imo, is to use a "chain link" so you don't need to reallocate > Vector/Hashtable/or whatever you use to store the mapping. This is > probably very complex thing to implement and could increase the > size of > the application by quite a bit. > > The same base idea could be used to index any object type field like > String or Integer or user defined object. > > Thiago Moreira (timba) wrote: > > > > Hi Sérgio, > > > > Thank you for your explanation! I forgot about the JAD's property. > > > > I have been noticing that our search mechanism lacks in performance, > > this is due the lack of RMS's features too but I will try to fix > some > > of them in the next release (1.4.0) that will have the > performance as > > the main target. > > So, if you have any idea how to improve the performance of Floggy, > > please share with us!! Features that I'm planning to develop: > > > > - Indexes for fields of type String, Numbers and Date. > > - Stop a search if the object target was found > > > > Um abraço! > > > > Thiago Moreira > > > > 2009/8/28 Sergio <se...@st... > <mailto:se...@st...> > > <mailto:se...@st... <mailto:se...@st...>>> > > > > You need to change MIDlet-Data-Size property on your manifest > and jad > > file, but if you read the documentation on this you will find > that the > > device has no obligation to give you the space you requested and > > simply > > refuse to install your application. Also make sure your > application is > > not installed on memory card. > > > > Also keep in mind that the RMS is not a database like SQL CE > (used on > > windows mobile devices), the RMS is much more simpler way to store > > data. > > > > To provide a better way to search data, maybe Floggy could > encapsulate > > the RecordEnumeration interface, because sometimes you searching > > for few > > records and once you find it you still need to iterate through all > > records when using the find() method from PersistableManager. This > > would > > also add a way for the developer to cancel a "find()" if you do this > > enumeration on a thread for example. > > > > Another thing If you have mappings on Person class, like this: > > > > class person { > > String name; > > // ... > > Address homeAddress; > > Address workAddress; > > } > > > > and you don't need the address in your Filter implementation you > > should > > call find() passing true on the lazy parameter (the last > parameter on > > that method). I'm not sure if true is the default value. If you do > > this > > when you call the get(int) method from the ObjectSet the object > > returned > > will not have the Addresses loaded, you will need to use > > getId(int) and > > load the object yourself. This brings me to another request, add > a way > > to change the lazy option from an ObjectSet. > > > > > > Thiago Moreira (timba) wrote: > > > > > > Hi Dr Askar, > > > > > > Your implementation of search is correct. The thing is you are > > > searching trough ~3600 objects this is expensive in a JME > > device. How > > > long this takes? > > > > > > To change the amount of space for a given RMS is device dependent. > > > So you have to check the configuration of your device to > change this > > > amount. Some devices does not enable the user/developer change it. > > > Good luck! > > > > > > Um abraço > > > > > > Thiago Moreira > > > > > > 2009/8/27 محمد عسكر <dr....@gm... > <mailto:dr....@gm...> > > <mailto:dr....@gm... <mailto:dr....@gm...>> > <mailto:dr....@gm... <mailto:dr....@gm...> > > <mailto:dr....@gm... <mailto:dr....@gm...>>>> > > > > > > hi > > > this is the code that i used to search > > > > > > > > > ------------------------------------------------------------------------------ > > > public ObjectSet search(String id){ > > > Person person = new Person(); > > > > > > try { > > > PersistableManager pm = PersistableManager.getInstance(); > > > > > > /* To load an object, use the object ID > > > * generated previously by the save() operation. > > > */ > > > > > > ObjectSet persons =pm.find(Person.class,new > > > Filtername(id),null); > > > > > > return persons; > > > } catch (FloggyException e) { > > > > > > } > > > return null; > > > > > > } > > > > > > > > ------------------------------------------------------------------- > > > i have another problem > > > i tell you that i have 6000 record but the program didn't > > allow me to > > > add more than 3600 (i don't remember exactly) and the error > > message: > > > "javax.microedition.rms.RecordStoreFullException" > > > so any idea to increase the amount of record that i can add? > > > > > > thanx very much for your help and patient > > > > > > 2009/8/26, Dan Murphy <dge...@gm... > <mailto:dge...@gm...> > > <mailto:dge...@gm... <mailto:dge...@gm...>> > > > <mailto:dge...@gm... <mailto:dge...@gm...> > <mailto:dge...@gm... <mailto:dge...@gm...>>>>: > > > > Hi Dr Askar,Please can you clarify what you mean by slow, this > > > is a large > > > > number of records for a mobile device... Do you have a code > > > sample you could > > > > send ? > > > > > > > > Thanks, > > > > Dan > > > > 2009/8/26 محمد عسكر <dr....@gm... > <mailto:dr....@gm...> > > <mailto:dr....@gm... <mailto:dr....@gm...>> > > > <mailto:dr....@gm... <mailto:dr....@gm...> > <mailto:dr....@gm... <mailto:dr....@gm...>>>> > > > > > > > >> hi > > > >> i have problem with search > > > >> i made database with 6000 records > > > >> but when i search it's slow > > > >> any idea to increase the speed? > > > >> thanx > > > >> > > > >> > > > >> > > > > > > ------------------------------------------------------------------------------ > > > >> Let Crystal Reports handle the reporting - Free Crystal > > Reports > > > 2008 > > > >> 30-Day > > > >> trial. Simplify your report design, integration and > > deployment > > > - and focus > > > >> on > > > >> what you do best, core application coding. Discover > > what's new with > > > >> Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > >> _______________________________________________ > > > >> floggy-user mailing list > > > >> flo...@li... > <mailto:flo...@li...> > > <mailto:flo...@li... > <mailto:flo...@li...>> > > > <mailto:flo...@li... > <mailto:flo...@li...> > > <mailto:flo...@li... > <mailto:flo...@li...>>> > > > >> https://lists.sourceforge.net/lists/listinfo/floggy-user > > > >> > > > > > > > > > > > > > -- > > > الخطوة القادمة > > > > > > حتى 1 تموز أصواتنا تتكاتف ليصل صوتنا > > > > > > تخفيض - توفير - عدالة > > > > > > السكوت على الظلم كالمشاركة فيه > > > > > > http://www.syrian-sport.net/nomobile > > > > > > لا تسمح لأحد أن يأخذ الأولوية في حياتك عندما تكون أنت خياراً > > ثانوياً > > > في حياته > > > > > > > > > ------------------------------------------------------------------------------ > > > Let Crystal Reports handle the reporting - Free Crystal Reports > > > 2008 30-Day > > > trial. Simplify your report design, integration and deployment - > > > and focus on > > > what you do best, core application coding. Discover what's > > new with > > > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > _______________________________________________ > > > floggy-user mailing list > > > flo...@li... > <mailto:flo...@li...> > > <mailto:flo...@li... > <mailto:flo...@li...>> > > > <mailto:flo...@li... > <mailto:flo...@li...> > > <mailto:flo...@li... > <mailto:flo...@li...>>> > > > https://lists.sourceforge.net/lists/listinfo/floggy-user > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > ------------------------------------------------------------------------------ > > > Let Crystal Reports handle the reporting - Free Crystal Reports > > 2008 30-Day > > > trial. Simplify your report design, integration and deployment - > > and focus on > > > what you do best, core application coding. Discover what's new > with > > > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > > > > ------------------------------------------------------------------------ > > > > > > _______________________________________________ > > > floggy-user mailing list > > > flo...@li... > <mailto:flo...@li...> > > <mailto:flo...@li... > <mailto:flo...@li...>> > > > https://lists.sourceforge.net/lists/listinfo/floggy-user > > > > > > > > ------------------------------------------------------------------------------ > > Let Crystal Reports handle the reporting - Free Crystal Reports > > 2008 30-Day > > trial. Simplify your report design, integration and deployment - > > and focus on > > what you do best, core application coding. Discover what's new with > > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > _______________________________________________ > > floggy-user mailing list > > flo...@li... > <mailto:flo...@li...> > > <mailto:flo...@li... > <mailto:flo...@li...>> > > https://lists.sourceforge.net/lists/listinfo/floggy-user > > > > > > > ------------------------------------------------------------------------ > > > > > ------------------------------------------------------------------------------ > > Let Crystal Reports handle the reporting - Free Crystal Reports > 2008 30-Day > > trial. Simplify your report design, integration and deployment - > and focus on > > what you do best, core application coding. Discover what's new with > > Crystal Reports now. http://p.sf.net/sfu/bobj-july > > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > floggy-user mailing list > > flo...@li... > <mailto:flo...@li...> > > https://lists.sourceforge.net/lists/listinfo/floggy-user > > > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports > 2008 30-Day > trial. Simplify your report design, integration and deployment - > and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > _______________________________________________ > floggy-user mailing list > flo...@li... > <mailto:flo...@li...> > https://lists.sourceforge.net/lists/listinfo/floggy-user > > > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day > trial. Simplify your report design, integration and deployment - and focus on > what you do best, core application coding. Discover what's new with > Crystal Reports now. http://p.sf.net/sfu/bobj-july > ------------------------------------------------------------------------ > > _______________________________________________ > floggy-user mailing list > flo...@li... > https://lists.sourceforge.net/lists/listinfo/floggy-user > |