AddIndex() single call is threaded?

Hey guys

I have a question about indexing of coherence, I hope you can clarify.

Currently, our indexing process takes up to 60 minutes to create indexes for 500 K entered on a cache.
There is an XML cache and uses reflection Extractor to extract the XPath attribute to create indexes.

Boot cache is a two-step process: first, we have finished priming the cache; Second, we start adding indexes.

60 minutes is too long, so we wrote a quick code to test whether the addition of index in parallel (using nodes of treatment) would reduce overall creation time.

But it made no difference. It is always in 60 minutes.

Does this mean addIndex() call will block the entrance so that it's staged, that makes the other threads to wait his turn?

I checked all the documents, could not find any answers. Advice will be a great help.

Note:
-Business wants certainly maintain XML cache and index attributes based on XPATH.

Thank you
Khaldi

Oh dear... If I had £1 for everywhere where I worked there where the company was certain that they had need to store the XML within a coherence cache I'd be a rich man (well, I would have a few pounds anyway). If you really need to store large amounts of XML and querying so as much as it pains me to say it is perhaps best products that the consistency to do it in.

Running regarding several addIndex calls in parallel, as far I'm aware consistency only runs a call on one single addIndex hiding both.

As for your problem, 60 minutes to add the index seems like a very long time. There are various reasons why this might be. How many clues you add? What size (in bytes) are the XML values that put you in the cache. How many storage nodes are in your cluster and what is the chunk size for them. If you use extractors of reflection then needed to deserialize the entire cache for each index storage nodes you add which could cause a lot of GC.

JK

Tags: Fusion Middleware

Similar Questions

  • Call a thread after a specific interval of time?

    Hello, any help is appreciated...

    I use this to call my thread each time interval... .but I noticed that if my request is at bottom the timertask won't calls on the interval specified... sometimes its end a minute | 5 minutes | 10 minutes...
    Is there a better way to run this.
    This is the code:
    TimerTask _tt;
    _Timer timer;

    _tt = new TimerTask() {}
    public void run() {}

    new FlightCheckThread (_sqlmanager) .run ();
    } / / end of race
    };
    _Timer.scheduleAtFixedRate (_tt, 180000, 300000);

    Run is not the right way to start a thread's start().
    like the timertask documentation notes that it is not intended to block stains, using start() should solve the problem of synchronization.

  • Call any thread DLLs the application crashes

    I have a built in 2015-labview application that acquires spectra of 6 spectrometers via an external dll. The dll triggers an event in labview when data is ready to be pulled from the spectrometers. Since this event, I am running a reentry no void / vi which contains a node function to retrieve the data, that are configured to run in any thread, as it gives a drastic improvement of performance as apposed to run in the UI thread.

    However this can slow down the application crash with a message from windows like the following journal:

    Name of the failing application: axiom 2.0.exe, version: 1.0.0.82, time stamp: 0x5581a6b7
    The failed module name: lvrt.dll, version: 15.0.0.4024, time stamp: 0x5581ac03
    Exception code: 0xc0000005
    Offset: 0x0000000000bec7c0
    ID of the process failed: 0x15c0
    Start time of application vulnerabilities: 0x01d11e6face9febd
    The failing application path: C:\Axiom 2.0\builds\Axiom 2.0\Axiom 2.0.exe
    Path of the failing module: C:\Program NIUninstaller Instruments\Shared\LabVIEW Run-Time\2015\lvrt.dll
    Report ID: 7d4ef3a8-8a91-11e5-94e9-90b11c894ef8

    I don't know if the dll is said to be thread safe or not. Also I do not understand how this causes a problem anyway since it is the only node that accesses the dll at the time, and each of the 6 spectrometers are interviewed in order?

    Is there anyway that I can still enjoy the benefits that the call of any thread dll provides without causing my application crash.

    An example of the increase in performance, it's that I can query the spectrometer from 6 to 70-80 Hz when configured to run in any thread, as opposed to a simple 10 Hz when the Run value in the UI thread.

    Thank you

    Jimmy01 wrote:

    I don't know if the dll is said to be thread safe or not. Also I do not understand how this causes a problem anyway since it is the only node that accesses the dll at the time, and each of the 6 spectrometers are interviewed in order?

    Is there anyway that I can still enjoy the benefits that the call of any thread dll provides without causing my application crash.

    Looks like that the DLL is not thread-safe. If you do not run in the UI thread, there is no guarantee that the DLL will be always called from the same thread, even if you only call it in one no reentrante Subvi. By default, LabVIEW allocates multiple threads by the enforcement system, with the exception of the user interface. If the DLL stores certain information of one call to the other, this context can be lost when run in a different thread.

    Here's a thread that provides two possible solutions; a wrapper DLL is required, use the other the utility 'threadconfig' (or the corresponding INI file settings) to force a subsystem of a thread executing unique http://forums.ni.com/t5/LabVIEW/Force-DLLs-to-tun-in-the-same-thread-expect-the-UI-Thread/td-p/11438...

    Another option would be to put the call to the DLL in a timed loop that runs constantly, and you can use a queue or the notifier to pass data to. A timed loop runs in a single dedicated thread, so I think it will work.

  • There's that one button and a single call back could be defined in a toast using HTML5?

    Dear all, I have read the toast associated documents and ask yourself who is only a button and a single reminder could be set for a toast using HTML5? I want to display three buttons and defined three call back for my bread, is possible? If it is not possible to use the toast to do this, how could do this using another approach? Your comment and suggestion would be very useful. Thank you https://developer.blackberry.com/html5/apis/blackberry.ui.toast.html

    Toasts are really intended to be notifications from style UI components. That's why we provide a button if you want some specific user recommended. But they are not designed to be a notification of modal style.

    If you want to display several options for a user to select, you can use a dialog box according to the following documentation:

    - https://developer.blackberry.com/html5/apis/blackberry.ui.dialog.html

    You can take our HTML and CSS and make your own toast and just show/hide div as you wish if ours is not flexible enough for you.

  • Run not called in thread

    I'm trying to get a thread that runs in the background to update a label field in a screen, but for some reason any of the thread run() method is not called. I'm using JDE 4.3.0.

    package UpdateTest;
    
    import net.rim.device.api.ui.UiApplication;
    import net.rim.device.api.ui.component.LabelField;
    import net.rim.device.api.ui.container.MainScreen;
    import net.rim.device.api.ui.component.Dialog;
    import net.rim.device.api.system.DeviceInfo;
    import java.lang.Runnable;
    import java.lang.Thread;
    
    public class UpdateTest extends UiApplication
    {
        public UpdateTest()
        {
          pushScreen(new UpdateTestScreen());
        }
    
        public static void main(String[] args)
        {
            UpdateTest bm = new UpdateTest();
            bm.enterEventDispatcher();
        }
    } 
    
    final class UpdateTestScreen extends MainScreen
    {
        LabelField _field;
    
        UpdateThread upThread;
    
        public UpdateTestScreen()
        {
            super();
    
            upThread = new UpdateThread();
            upThread.start();
    
            setTitle("Update field test");
    
            add( new LabelField("field: ") );
            _field = new LabelField("0");
            add(_field);
        }
    
        public boolean onClose()
        {
            Dialog.alert("exit");
            upThread.stop();
            System.exit(0);
            return true;
        }
    
        public class UpdateThread extends Thread
        {
            private volatile boolean _start = false;
            private volatile boolean _stop = false;
            private static final int TIMEOUT = 500;
    
            public UpdateThread()
            {
                super();
                System.out.println("UpdateThread Created");
            }
    
            public void stop()
            {
                _stop = true;
                System.out.println("UpdateThread Stopped");
            }
    
            public void start()
            {
                _start = true;
                System.out.println("UpdateThread Started");
            }
    
            public void run()
            {
                System.out.println("UpdateThread running");
                for(;;)
                {
                    while( !_start && !_stop)
                    {
                        try {
                            sleep(TIMEOUT);
                            System.out.println("UpdateThread sleeping");
                        } catch (InterruptedException e) {
                            System.err.println(e.toString());
                        }
                    }
    
                    if (_stop)
                        return;
    
                    UiApplication.getUiApplication().invokeLater(new Runnable() {
                        public void run() {
                            _field.setText("" + System.currentTimeMillis());
                        }
                    });
                    System.out.println("invoked");
                }
            }
        }
    
    }
    

    If you go to substitute Thread.start, then call super.start () somewhere in there, like after your DD.

  • I have two catalogs - Lightroom called an and a single called Lighroom 5, both in the same folder (Mac). I used 5, but now use LR CC. Just the catalof error. Now, he wants to make me choose one to use. Which one? And then I delete the other?

    I used LR 5 for a year or so, but recently spent to LR CC has been since then problems. Earlier got the dreaded corrupt CC catalog error and had to leave the app. When I restarted I got a dialog box showing two catalogs in the same folder. One is called simply Lightroom and Lightroom 5. The dialog box wants me to choose an action. I suppose that the LR 5 is older, but do not want to make things worse. And, once I choose the right, how safely get rid of the bad? Thank you.

    Navigate to the folder that contains your catalogs and look at the dates. The one with the most recent date would be the one you use. However, if it is damaged, it will be difficult to recover. It would be better to replace it with your latest backup. You can double-click the file itself catalog, Lightroom will start and try to open this catalog. But if it is corrupt, there are not many things you can do.

  • Performance of the queries of multiple virtual machines in a single call

    Hi all

    I'm a little rusty on what I used to do that, but that was almost a year ago...

    I'm trying to retrieve the performance data for several virtual machines.

    For now, I have this in serial mode, i.e. running QueryPerf on each virtual machine.

    The problem is that I have about 800 of them connected to one of my VC. Needless to say, this take a LOT of time to review all of the VM.

    Y at - it sort of method that will allow me to provide a picture of VM and application (performance counters) on all virtual machines, I guess that this will be faster than going and one by one.

    Thanks in advance!

    Hello

    QueryPerf method accepts an array of data object PerfQuerySpec. Here, each PerfQuerySpec object points to a managed entity for which the statistics are to recover.

    So in your scenario, before calling queryPerf, you can create PerfQuerySpec for each virtual machine, assign to each of them in PerfQuerySpec table. You can then pass this [of PerfQuerySpec] the call of queryPerf to retrieve statistics for all virtual machines.

    Hope that the information above solves your query.

    -Neha

  • How to spanne line / single called for a similar group of lines

    Hello

    I have a detail existing like that report, there is a conditional formatting on the cost, GP and safe etc..

    Type of mandate

    Type of assets

    Cost of the asset

    Term

    Grace period

    Deposit

    Future

    Vehicle

    1 173 952

    48

    0

    0% of the cost

    Future

    Vehicle

    4 173 952

    60

    0

    0% of the cost

    Future

    Vehicle

    1 500 000

    60

    0

    0% of the cost

    Future

    Material

    10,500,952

    48

    2

    10% of the cost

    Current

    Vehicle

    269 352

    36

    0

    0% of the cost

    Current

    Machines

    60,269,352

    48

    0

    0% of the cost

    Current

    Material

    200 000

    36

    0

    0% of the cost

    Current

    Material

    450 000

    36

    0

    0% of the cost

    Current

    Material

    250 000

    36

    0

    0% of the cost

    And we need to change the report at the start of this way without removing any existing conditional formatting.

    Type of mandate

    Type of assets

    Cost of the asset

    Term

    Grace period

    Deposit

    Current

    Vehicle

    269 352

    36

    0

    0% of the cost

    Machines

    60,269,352

    48

    0

    0% of the cost

    Material

    200 000

    36

    0

    0% of the cost

    Material

    450 000

    36

    0

    0% of the cost

    Material

    250 000

    36

    0

    0% of the cost

    Future

    Vehicle

    1 173 952

    48

    0

    0% of the cost

    Vehicle

    4 173 952

    60

    0

    0% of the cost

    Vehicle

    1 500 000

    60

    0

    0% of the cost

    Material

    10,500,952

    48

    2

    10% of the cost

    I tried many lines lasted , but without success, sometimes text out of the table or line covering the expected grouping. It is out of control for me

    Please help me, provide any sample/demo.

    Thank you

    I just tried according to your xml provided in post above, here is the model of form field and overview for your help.

    It's like you want.

    Type of mandate

    Type of assets

    Term

    Cost of the asset

    Grace period

    Deposit

    G V IF TERM_TYPE RS

    G V IF ASSET_TYPE RS

    G V IFTERMRS

    F ASSET_COST

    GRACE_PERIOD

    DEPOSIT E E E E

    Form fields

    G

    V

    IF

    TERM_TYPE

    RS

    G

    V

    IF

    ASSET_TYPE

    RS

    G

    V

    IF

    TERM

    RS

    F

    ASSET_COST

    GRACE_PERIOD

    DEPOSIT

    E

    E

    E

    E

    Overview

    Type of mandate

    Type of assets

    Term

    Cost of the asset

    Grace period

    Deposit

    Current

    Material

    36

    200 000

    0

    0% of the cost

    450 000

    0

    0% of the cost

    250 000

    0

    0% of the cost

    Machines

    48

    60,269,352

    0

    0% of the cost

    Vehicle

    36

    269 352

    0

    0% of the cost

    Future

    Material

    48

    10,500,952

    2

    10% of the cost

    Vehicle

    48

    1 173 952

    0

    0% of the cost

    60

    4 173 952

    0

    0% of the cost

    1 500 000

    0

    0% of the cost

    Note: as you mentioned earlier, it is a conditional formatting and logic on the existing model, these must be change as field are group / nested group, you may need to set field with current - group)

  • Is it possible to recover all the virtual machines in a cluster in a single web service call?

    I tried to retrieve the list of all virtual machines in a cluster to a single web service call, but to no avail. It seems that there is no direct web service API to achieve this goal. Alternative options must first recover the hosts or data warehouses in the cluster and then recover virtual machines from there. But still, if anyone has an idea how we can do this please let me know. All help information will be greatly appreciated.

    It is possible, if you use the PropertyCollector.

    (It is usually the answer to questions of the form "Is it possible to retrieve the X in a single web service call").

    Call"propertycollector.retrievecontents:

    http://www.VMware.com/support/developer/VC-SDK/visdk41pubs/ApiReference/vmodl.query.PropertyCollector.html#retrieveContents

    allows you to retrieve a whole bunch of stuff in a single call, which you then have to go through and interpret.

    A snippet of code Java VI is not-really-tested to find virtual machines in a ComputeResource (cluster) is attached.

  • ibdev() returns EDVR after repeated successful calls.

    After between 800 and 1400 repeated successful calls, ibdev() returns EDVR

    I have a DLL that makes a single call to ibdev().  Communications to the instrument using the unique Deviceid returned by ibdev() until the release of the DLL.  The DLL can be loaded and release hundreds of times by the parent program.  After between 800 and 1400 ibdev() successful calls returns EDVR.  The number of calls varies according to the operating system or version of NOR-488. 2, but is exactly predictabe for a particular host.  He fails once 800 calls for Windows XP, 2 GB of ram with or 2.7.  It fails after 1400 calls for 8 GB of ram WIndows 7 with 3 or.  The behavior seems to indicate that a specific number of device is exceeded.  Another possibility is that there is a sort of stamp of saturation in NOR-488. 2, but it doesn't seem to be in agreement with a predictable failure point.

    I have the feeling that I need to explicitly release the camera when I finish the DLL, but I don't know any appeal NOR-488. 2 to do.

    Any thoughts?

    Thank you

    AWO

    Lea,

    Thanks for the tips.  I'll give ibonl a try.  However, I am out of the Office for the week, so it will be Monday before I can see if it works for me.  I'll leave this thread open so far here.

    Thanks again,

    AWO

  • Charm keeps dropping calls

    I got the thin charm of last week and on Tuesday and Wednesday, he dropped a single call every day. I had restarted the phone and even out the battery, let it rest for a minute, put again and reboot. Today, after an appeal, I called Tmobile help. Finished talking to a Manager because the service person would not help me. While on the phone with the Manager, phone dropped a call. He had me change the SIM card. I went to call her husband (we both had the charm same day) to change his card too, got to your Inbox, voice calling, Tmobile tried, a semicircle, abandoned the appeal. At the customer service, they passed me to level 2 technical support, it was about to give me directions and dropped call. He ended up leaving me a voice message, because he tried to call me twice and each time it went straight to voicemail. Was told to change the settings from 3G to 2G. I've only used the phone 15 minutes since the switch to 2G, but he didn't give up. However, I do not know, but for me, who does not appear that the phone works properly. Since its less than 2 weeks, must I remind them to send a new phone? It was set to day so guess what is is not a problem to update. It's my first Android so I am somewhat a novice (and blonde lol) so theres other things I need to try, will you please give me instructions simple lol

    Unless you live in an area that has a cellular cover bad, this should not be past.

    If the sim card was not a solution.

    Inviting you to fall to the bottom of your data to 2G isn't a great answer because your payment getting 3G.

    If you have only had this phone a few days and that I return it for another. If the new has the same problem, I would check your cell phone coverage in your area by calling T-mobile and asking.

  • Thread mode in LabVIEW 2010 bug?

    I had an application written in LabVIEW 2009 for a PSC-2220 who stopped working when it was converted in LabVIEW 2010, and I tracked down the problem to one thing: the software sets the mode of the Serial wire. Call this method simply disables all of the program. It works when you run from LabVIEW... but if you build an application to start it will not start. Remove the call to thread mode - and voila, the application runs as it should.

    -I can solve the problem easily by calling does not fashion wire method, but this isn't a solution due to the fact that I need to use the RS-422/485 port RS485 2-wire mode.

    I found a solution that I can live with... it does not explain what is wrong, but here's what I had to do to be able to run the init.vi serial port from outside vi.lib\Instr\ - which in turn allowed me to add the changes I need (set the thread mode) without having to edit a library function :

    I had to flatten, i.e.replace all of its report with their content... I could have tried the inline function, but did manually to be sure.

    This may indicate that something is wrong with the binding when the program is compiled with RT... but it happens without producing errors of conflict or anything either. A startup.exe is produced - but is not able to run.

  • reentrant VI copies the entire structure VI (of Subvi) when it is called?

    Hello world

    I would ask each of you about the reentrant VI.

    I have a VI (Thread.vi), which is set to reentrant (Preallocated clone reentrante execution) that is called from the main vi using the method run a VI. Reference of vi is open with all of the option 0 x 8.

    When I call the Thread.vi, the original vi clone is created.

    My question is, when the clone of the first level vi (Thread.vi) is created, all the Subvi contains the Thread.vi is also the Subvi originally clones?

    Going to queue named in the Thread.vi when it is called by using the control property value node and using this queue within the Thread.vi (in sub - VI) to control the Thread.vi.

    My problem is that when two clones are created, I can run, stop, and close the two together. But when I want to close the second clone, the Dequeue function reference to queue the first clone. I do not understand what the queue has been obtained with the name in the main vi and spent in the clone of Thread.vi. When I want to close the first clone, it works as it has reference to the appropriate queue.

    I thought that LabVIEW creates entire hierarchy of the Subvi the reentrant VI so when it is called.

    Thank you for your answers and help.

    Tukan

    I'm using LabVIEW 2014 32 b, Windows 7

    You use named queues, so unless you call your clones several times (rather than, say, calling a clone and get running code in a loop for a "long time"), I would recommend not worrying to pass a reference queue for the Clone, but rather the name of the queue.  Get the Clone of its own queue - if the hand is already done, get queue of the Clone will not allocate a new queue, but returns the reference to the queue already created.

    Screws that are used by the Clones can be "specific clone" (if they are, themselves, marked as Reentrant) or 'universal' and shared by all of the Clones.  There is really nothing wrong with that, as long as you realize that while A Clone uses void-VI X, Clone B will be "blocked" when it tries to use the Subvi, if you want to run in a mode of the Subvi '-and-out ", without blocking.  In particular, not to put any function, for example a Dequeue, who must wait in a common Subvi.

    Bob (who has learned this "rule" with the sad experience) Schor

  • thread-> PostUIMessage throws com_error Exceptions

    We have developed a TestStand OI (4.2) including a tracelogger function. Code modules (dll is coded in C++) used in the sequences can send trace messages to the IO by using the function PostUIMessage (see the following code):

    Try
    {
    Get the thread running in the context of the sequence
    thread = seqContext-> GetThread();

    thread-> PostUIMessage (static_cast (UIMsg_UserMessageBase + 4)
    Level
    _bstr_t (Msg),
    (TRUE);
    }
    catch (_com_error & com_error) / * API TestStand throws only this kind of exception * /.
    {
    .....
    }

    It happens that a message is sent every 10ms. Generally this works well both when you run the sequence in the sequence editor and in our IO. But after a rogue from time of 10 minutes to a few hours (depends on the frequency of messages) the PostUIMessage throws a com_error Exception.

    Note: The code is reported as critical section to ensure that it works in multi thread environments too.

    Does anyone have any idea what could be the reason for these exceptions and how to avoid them?

    Thanks in advance

    Peter

    Hi Peter,.

    You wrote that this cycle is about 10ms.

    It's fast!  Normally I use these rates in the threads of work or the threads separated from TS.

    If you have such this in your module or the code sequence file.

    Maybe your variables "seqSontext" or "thread" is not valid.

    Before calling the thread-> PostUIMessage check that everything is valid.

    Hope this helps

    Jürgen

  • multi thread dll

    Hello

    I have a labview application where I need to use a function built user centroiding.   I have compiled this usrCentroid.c stand-alone function in a dll, using a script:

    GCC - c-o %1.o %1.c
    GCC-shared o %1.dll %1.o

    the GCC is a free version of MinGW.

    I then used the CIN to call this dll, everything works.  However, when I tried to use two of the dll at the same time (value becomes too), I couldn't get the parallel execution in time. There are always two times longer than a single call to the dll.

    an engineer OR tried on his computer to quad processor (I don't have a processor doubles) with timed loop, he gave the same result.  He suggseted me to create a multithreaded for usrCentroid.c dll.

    Is anyone out there built for multithreaded dll?  I found no option to gcc generate the multithreaded dll.

    I tried to have two functions completely different (usrCentroid1.c and usrCentroid2.c, nothing in common) and built two DLLs.  I asked the engineer OR to try again on his quad CPU.  Calling these two DLLs, always give the same result as before.

    However, he said that if he used the IMAQCentroid of Labview function with the same parallel pattern, he had simultaneously as a single call to the dll.

    is there something here I need to take into account for the built dll user?

    appreciated any suggestion or advice.

    Xiaofeng


Maybe you are looking for